开放平台-web实现人人网第三方登录
应用场景
操作步骤
登录流程


案例实战
本地开发环境准备
前端登录跳转页面
<html>
<head>
<title>人人网登录跳转</title>
<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript">
//应用的APIKEY
var apiKey = "3ce9cb1e264f4e93b1f38807be66e629";
//成功授权后的回调地址
var redirectUrl = "@@{openapi.Renrens.callback()}"; var authorizeUrl = "https://graph.renren.com/oauth/authorize?"
var queryParams = ['client_id=' + apiKey,'redirect_uri=' + redirectUrl,'response_type=code'];
var url = authorizeUrl + queryParams.join('&'); //打开授权登录页面
window.location.href= url;
</script>
</head> <body>
</body>
</html>
server端处理回调,同步信息
/**
* 授权回调
*
* @param code
* @param error
*/
public static void callback(String code) {
if (!StringUtils.isEmpty(code)) {
error("授权失败");
} // 根据code换取accesstoken,包括用户信息
// ... String callbackUrl = RouteContext.getUrl("openapi.Renrens.callback", Collections.EMPTY_MAP,
true);
RenrenToken token = RenApi.getTokenInfo(code, callbackUrl);
if (token == null) {
error("授权失败:无法获取连接系统");
}
render(code, token);
}
/**
* 返回token数据对象
*
* <pre>
* * {
* "token_type":"bearer",
* "expires_in":2595096,
* "refresh_token":"127021|0.KAS3b8doSitHk6RLDtitb2VY8PjktTRA.229819774.1376381303243",
* "user":{
* "id":229819700,
* "name":"二小姐",
* "avatar":[
* { "type":"avatar",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_head_KFTQ_d536000000d0111b.jpg"
* },
* { "type":"tiny",
* "url":"http://hdn.xnimg.cn/photos/hdn221/20130805/2055/tiny_jYQe_ec4300051e7a113f.jpg"
* },
* { "type":"main",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_main_ksPJ_d536000000d0111b.jpg"},
* { "type":"large",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_large_yxZz_d536000000d0111b.jpg"
* }
* ]
* },
* "access_token":"127066|6.08718aa138db0578dda3250f33bads6e.2592000.1378976400-229819774"
* "scope":"read_user_feed read_user_album",
* </pre>
*
* @author littleatp
* @createDate 2015年4月14日
*
*/
public class RenrenToken { public String token_type;
public int expires_in;
public String refresh_token;
public String access_token;
public String scope; public RenrenUser user;
}
/**
* 人人网用户信息
*
* <pre>
* "user":{
* "id":229819700,
* "name":"二小姐",
* "avatar":[
* { "type":"avatar",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_head_KFTQ_d536000000d0111b.jpg"
* },
* { "type":"tiny",
* "url":"http://hdn.xnimg.cn/photos/hdn221/20130805/2055/tiny_jYQe_ec4300051e7a113f.jpg"
* },
* { "type":"main",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_main_ksPJ_d536000000d0111b.jpg"},
* { "type":"large",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_large_yxZz_d536000000d0111b.jpg"
* }
* ]
* },
* </pre>
*
* @author littleatp
* @createDate 2015年4月14日
*
*/
public class RenrenUser { public long id;
public String name;
public List<RenrenAvatar> avatar; public String getAvatarUrl() {
if (avatar == null || avatar.isEmpty()) {
return "";
}
return avatar.get(0).url;
} public static class RenrenAvatar {
public String type;
public String url;
}
}
/**
* 人人网API
*
* <pre>
* 登录流程:
*
* 1 前端跳转人人网授权(code方式)
* 2 回调获得authorize code
* 3 通过code换取access_token
* 4 获得token及用户信息
*
* 参考文档:
* http://wiki.dev.renren.com/wiki/Authentication
* </pre>
*
*
* @author littleatp
* @createDate 2015年4月10日
*
*/
public class RenApi { public static String apiKey = "xxx";
public static String secretKey = "xxx"; public static String baseUrl = "https://graph.renren.com/oauth"; protected static final String URL_GET_TOKEN = baseUrl + "/token?grant_type=authorization_code"
+ "&client_id=%s&client_secret=%s&code=%s&redirect_uri=%s"; protected static final long ACCESS_TIMEOUT = 15; protected static final String DEF_APP_TOKEN_EXPIRE = "3h";/**
* 获取token信息
*
* <pre>
* http://wiki.dev.renren.com/wiki/Authentication#.E5.AE.A2.E6.88.B7.E7.AB.AF.E6.8E.88.E6.9D.83
* 返回token的同时也附带了用户信息
*
* 调用地址:
* https://graph.renren.com/oauth/token
*
* 参数
* grant_type:使用Authorization Code 作为Access Grant时,此值固定为“authorization_code”;
* client_id:在开发者中心注册应用时获得的API Key;
* client_secret:在开发者中心注册应用时获得的Secret Key。Secret Key是应用的保密信息,请不要将其嵌入到服务端以外的代码里;
* redirect_uri:必须与获取Authorization Code时传递的“redirect_uri”保持一致;
* code:上述过程中获得的Authorization Code。
*
* 返回结果如下:
* {
* "token_type":"bearer",
* "expires_in":2595096,
* "refresh_token":"127021|0.KAS3b8doSitHk6RLDtitb2VY8PjktTRA.229819774.1376381303243",
* "user":{
* "id":229819700,
* "name":"二小姐",
* "avatar":[
* { "type":"avatar",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_head_KFTQ_d536000000d0111b.jpg"
* },
* { "type":"tiny",
* "url":"http://hdn.xnimg.cn/photos/hdn221/20130805/2055/tiny_jYQe_ec4300051e7a113f.jpg"
* },
* { "type":"main",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_main_ksPJ_d536000000d0111b.jpg"},
* { "type":"large",
* "url":"http://hdn.xnimg.cn/photos/hdn121/20130805/2055/h_large_yxZz_d536000000d0111b.jpg"
* }
* ]
* },
* "access_token":"127066|6.08718aa138db0578dda3250f33bads6e.2592000.1378976400-229819774"
* "scope":"read_user_feed read_user_album",
* }
*
* 错误返回:
* {
* "error": "invalid_grant",
* "error_code": 20204
* "error_description": "Invalid authorization code: 9OCQp3IzRcwtSRPKOEUKiRRsz9SUNgdE"
* }
* http://wiki.dev.renren.com/wiki/%E9%94%99%E8%AF%AF%E5%93%8D%E5%BA%94
* </pre>
*
* @param accessToken
* @return
*/
public static RenrenToken getTokenInfo(String code, String callbackUrl) {
if (StringUtils.isEmpty(code)) {
return null;
} String url = String.format(URL_GET_TOKEN, apiKey, secretKey, code, callbackUrl); String resultString = DefaultHttp.get(url, ACCESS_TIMEOUT, GlobalConstants.UTF_8); Logger.debug("[sso-renren]get token. use url '%s'", url); RenrenToken token = JsonUtil.fromJson(resultString, RenrenToken.class);
if (token == null || StringUtils.isEmpty(token.access_token)) {
Logger.debug("[sso-renren]get token failed, with result of '%s'", resultString);
return null;
} Logger.debug("[sso-renren]get token success, with result of '%s'", resultString);
return token;
}
}
关于CSRF
常见问题
开放平台-web实现人人网第三方登录的更多相关文章
- 开放平台-web实现QQ第三方登录
应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com/ 2 准备一个可访问的域名, ...
- web实现QQ第三方登录 开放平台-web实现QQ第三方登录
应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com/ 2 准备一个可访问的域名, ...
- web实现QQ第三方登录
开放平台-web实现QQ第三方登录 应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1 注册成为QQ互联平台开发者,http://connect.qq.com ...
- 微信开放平台PC端扫码登录功能个人总结
最近公司给我安排一个微信登录的功能,需求是这样的: 1.登录授权 点击二维码图标后,登录界面切换为如下样式(二维码),微信扫描二维码并授权,即可成功登录: 若当前账号未绑定微信账号,扫描后提示“ ...
- 腾讯开放平台web第三方登录获取信息类(包含签名)
不清楚具体参数的可以先看下第三方登录的文档: class QQ { //$appid 你的appid //$openid 获取到的唯一的用户openid //$openkey 获取到的openkey ...
- iOS5.0以上使用新浪微博开放平台OAuth 续(及解决登录无效问题)
新浪微博开放平台为第三方应用提供了简便的合作模式,满足了手机用户和平板电脑用户随时随地分享信息的需求.通过调用平台的api即可实现很多微博上的功能. 本篇主要目的是记录新浪微博移动SDK iOS版本的 ...
- 微信开放平台,微信登陆第三方网站 提示redirect_uri 参数错误
在微信开放平台上我填写的回调域是:bbs.qiaoshisui.com/LoginApi/WeiXinCallBack,我构造的链接是:https://open.weixin.qq.com/conne ...
- ASP.NET Web API与Owin OAuth:调用与用户相关的Web API(非第三方登录)
授权完成添加属性 ClaimsIdentity oAuthIdentity = await CreateAsync(user/*userManager*/, OAuthDefaults.Authent ...
- 微信开放平台--》网站应用开发 微信登录网站接口(https://open.weixin.qq.com/)
地址:https://open.weixin.qq.com/ 手册:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&am ...
随机推荐
- 极客DIY:如何构建一台属于自己的基站
写在前面(原文作者) 上周我去特拉维夫(Tel Aviv)探望我的朋友结果有了一些收获,一块崭新的BladeRF(x40),即一个支持USB3.0的SDR平台,这就意味着可以同时发送和接收信息了.而H ...
- 微信分享 添加URL Schemes
1. TARGETS - Info - URL Types identifier -> weixin URL Schemes -> 应用id 2.在AppDelegate.h 引入头文件 ...
- UIImageView异步加载网络图片
在iOS开发过程中,经常会遇到使用UIImageView展现来自网络的图片的情况,最简单的做法如下: 去下载https://github.com/rs/SDWebImage放进你的工程里,加入头文件# ...
- 深入学习:如何实现不同Android设备之间相同应用程序的网络服务发现功能
在我们的app中添加网络服务发现功能(NSD)以方便在不同的设备上响应局域网中的请求.这种功能对于多设备之间点对点服务来说很有用,例如多人游戏,多人通话,文件共享等. 一,在网络中注册你的服务 注意: ...
- Android crash特殊位置定位
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 通常情况下,在我们开发的过程中遇到的crash,可以到logcat中找原因:如果做定制App,对方用 ...
- Request的参数信息
Request.ServerVariables["Url"] 返回服务器地址 Request.ServerVariables["Path_Info"] 客户端提 ...
- BZOJ2661 连连看 (费用流)
把所有点拆成两个,将符合条件的两个点x,y连上边,流量为1,费用为-(x+y). 做一遍最小费用最大流,最后ans div 2即可. Program bzoj2661; ; ..] of longin ...
- Rest中获取制定操作的UriTemplate
UriTemplate uri = WebOperationContext.Current.GetUriTemplate("DownloadFile");
- Web 仪表盘
/*********************************************************************** * Web 仪表盘 * 说明: * 之前很久,都想知道 ...
- Yocto 包管理 apt-get
/******************************************************************** * Yocto 包管理 apt-get * 说明: * 查一 ...