如果不配置授权回调页面域名,可以使用oauth2.0网页授权接口吗

评论-1042&
trackbacks-16
  紧接上一篇《》,这里专讲OAuth2.0。
理解OAuth2.0
  首先我们通过一张图片来了解一下OAuth2.0的运作模式:
  从上图我们可以看到,整个过程进行了2次&握手&,最终利用授权的AccessToken进行一系列的请求,相关的过程说明如下:
A:由客户端向服务器发出验证请求,请求中一般会携带这些参数
ID标识,例如appId
验证后跳转到的URL(redirectUrl)
状态参数(可选)
授权作用域scope(可选)
响应类型(可选)
B:服务器返回一个grant授权标识(微信默认情况下称之为code),类似于一个一次性的临时字符串密钥。如果在A中提供了redirectUrl,这里服务器会做一次跳转,带上grant和状态参数,访问redirectUrl。
C:客户端的redirectUrl对应页面,凭借grant再次发起请求,这次请求通常会携带一些敏感信息:
grant字符串(code)
grant类型(可选,微信中默认为code)
D:服务器验证ID标识、密码、grant都正确之后,返回AccessToken(注意,这里的AccessToken和之前通用接口、高级接口介绍的AccessToken没有关系,不能交叉使用)
E:客户端凭借AccessToken请求一系列的API,在此过程中不再会携带appId,Secret,grant等敏感的信息。
F:服务器返回请求结果。
微信的OAuth2.0使用
  了解了OAuth2.0的基本原理之后,我们来看一下OAuth2.0在微信中是如何运用的。
  假设一个场景:用户进入了一个微信公众账号,随后通过消息中的链接,在微信内嵌浏览器中打开了一个游戏网页,这个游戏需要用户登录并且记录用户的游戏得分。
  这种情况下我们有两种处理方式:
让用户在网页中进行注册、登录(并且每次打开这个网页都可能要重新进行登录,因为微信内置浏览器的cookie保存时间非常短),这个当然是个很坑爹的设计。
利用OAuth2.0。在用户进入这个页面的时候,先判断用户是否登录,如果没有,自动跳转到OAuth2.0授权页面,这个页面又自动进行了上述ABCD一系列验证,再通过EF得到用户的OpenId甚至更加详细的信息(包括头像),自动完成登录(或必要的注册)过程,随后用户以登录状态直接进入游戏。
  可以看出,使用OAuth2.0大幅度提高了用户体验,并且可以自动绑定识别用户微信OpenId。
  需要注意的是,上面提到的&OAuth2.0授权页面&还有两种形式:
当请求A中的Scope为snsapi_base时,整个授权过程自动完成,用户的客户端不会有任何中间页面显示,但是授权的结果仅能获取用户的OpenId(不管用户是否已关注,当然如果用户是关注用户,再次利用高级接口中的用户信息接口,利用OpenId获取用户资料也是可以的,只不过绕了几个弯)
当请求A中的Scope为snsapi_userinfo时,需要提供一个授权页面(类似很多网站利用微博账号、QQ号登陆的那种授权),仅当用户同意之后,立即获取到用户的详细信息,这里的用户必须是已经关注的用户。
  也就是说,snsapi_base的方法可以&神不知鬼不觉&地获取用户OpenId,全自动完成登录注册过程,但是信息量有限;snsapi_userinfo需要用户在指定界面上授权之后,自动完成整个过程,这个授权有一个时间段,超过时间后需要重新询问用户。
Senparc.Weixin.MP OAuth2.0接口
  源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/OAuth
  相比其他接口OAuth2.0略微复杂,相关内容将在下一篇专门进行介绍:
  源代码中相关方法如下:
namespace Senparc.Weixin.MP.AdvancedAPIs
//官方文档:http://mp./wiki/index.php?title=%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code
/// &summary&
/// 应用授权作用域
/// &/summary&
public enum OAuthScope
/// &summary&
/// 不弹出授权页面,直接跳转,只能获取用户openid
/// &/summary&
snsapi_base,
/// &summary&
/// 弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息
/// &/summary&
snsapi_userinfo
public static class OAuth
/// &summary&
/// 获取验证地址
/// &/summary&
/// &param name="appId"&&/param&
/// &param name="redirectUrl"&&/param&
/// &param name="state"&&/param&
/// &param name="scope"&&/param&
/// &param name="responseType"&&/param&
/// &returns&&/returns&
public static string GetAuthorizeUrl(string appId, string redirectUrl, string state, OAuthScope scope, string responseType = "code")
string.Format("https://open./connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type={2}&scope={3}&state={4}#wechat_redirect",
appId, redirectUrl.UrlEncode(), responseType, scope, state);
/* 这一步发送之后,客户会得到授权页面,无论同意或拒绝,都会返回redirectUrl页面。
* 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这里的code用于换取access_token(和通用接口的access_token不通用)
* 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
/// &summary&
/// 获取AccessToken
/// &/summary&
/// &param name="appId"&&/param&
/// &param name="secret"&&/param&
/// &param name="code"&code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。&/param&
/// &param name="grantType"&&/param&
/// &returns&&/returns&
public static OAuthAccessTokenResult GetAccessToken(string appId, string secret, string code, string grantType = "authorization_code")
string.Format("https://api./sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type={3}",
appId, secret, code, grantType);
return CommonJsonSend.Send&OAuthAccessTokenResult&(null, url, null, CommonJsonSendType.GET);
/// &summary&
/// 刷新access_token(如果需要)
/// &/summary&
/// &param name="appId"&&/param&
/// &param name="refreshToken"&填写通过access_token获取到的refresh_token参数&/param&
/// &param name="grantType"&&/param&
/// &returns&&/returns&
public static OAuthAccessTokenResult RefreshToken(string appId, string refreshToken, string grantType = "refresh_token")
string.Format("https://api./sns/oauth2/refresh_token?appid={0}&grant_type={1}&refresh_token={2}",
appId, grantType, refreshToken);
return CommonJsonSend.Send&OAuthAccessTokenResult&(null, url, null, CommonJsonSendType.GET);
public static OAuthUserInfo GetUserInfo(string accessToken,string openId)
var url = string.Format("https://api./sns/userinfo?access_token={0}&openid={1}",accessToken,openId);
return CommonJsonSend.Send&OAuthUserInfo&(null, url, null, CommonJsonSendType.GET);
  具体的示例方法见,以及对应的代码。
必须是通过认证的服务号才可以使用OAuth接口。
接口中用到的AccessToken和高级接口(包括通用接口)中用到的AccessToken互不相关,即使他们都是通过相同的AppId和Secret得到的。
目前官方的授权页面不是100%稳定,有时候需要多点几次才能顺利通过,如果发现此类情况,需要做一些判断反复请求,至少在表面上可以不让用户看到错误页面。
出于安全,在使用OAuth2.0之前,需要进入到微信后台的【我的服务】对回调页面的域名进行设置:
  系列教程索引:
阅读(...) 评论()OAuth2.0授权认证怎么弄
[问题点数:40分,无满意结帖,结帖人pzx60]
OAuth2.0授权认证怎么弄
[问题点数:40分,无满意结帖,结帖人pzx60]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。新浪微博客户端源代码-新浪微博OAuth2.0接口
今天在上看到新浪微博的API推出了2.0版本,其中最大的不同是采用了OAuth2.0授权机制,而且据说是在不久的将来(还没有时间表),新浪将不支持OAuth1.0,着时把我吓了一把。本着被修改的原则,我计划将我的应用也移到OAuth2.0,结果从昨天晚上,到今天上午,花了很长的时间读新的API,越读越失望,现将其中的OAuth2.0授权认证机制开发心得贴出来,供大伙参考。
第一步:修改Config.properties的配置信息.打开这个文件,将你的信息填入,具体如下:
client_ID =
(你申请应用的appkey)&&&&&&&&&&&&&&&&&&&&&&
client_SERCRET =(你申请应用的app_secret)
redirect_URI
=(回调地址,跟网上配置的一致,本人比较穷,而且用的是客户端,所以这里就为空)
&&& baseURL
accessTokenURL =/2/oauth2/access_token
&&& authorizeURL
=/2/oauth2/authorize
第二步打开example目录下的文件OAuth4Code.java,code如下图
第三步:运行此文件,浏览器会自动打开一个网页,如下图.在里面输入你的账号、密码,点击“登陆并授权”
第四步:登陆后,浏览器会自动跳转到回调页面(由于我没有自己的网站,没有填回调页面,所以浏览器会打开一个第三方授权错误的界面),把地址栏中的“/2/oauth2/authorize?code=XXXXX”中的XXX&
copy出来,这个是你要的东东。填写到下图的Eclipse的控制台中,然后回车.
第五步:将获取到的"access_token"(在控制台输出中查找)填入到ShowUser.java文件中,进行如下操作,然后运行程序,将返回你的个人信息。
String access_token =
args[0];将args[0]修改为刚才取得的"access_token";
String uid = args[1];
将args[1]修改为刚才授权用户的ID号;
总结:OAuth2.0的桌面应用非常不友好,以前在1.0中用PIN码授权时,至少用户可以将PIN码从授权页面填入程序的页面,现在的CODE放在地址栏中,只有专业人士才会用,希望SINA在关闭1.0前,能改进现有的验证方式,让用户的验证授权更加友好。
OAuth2.0 API地址:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Oauth2.0协议曝漏洞&大量社交网隐私或遭泄露
中国新闻网
&&&&来源:&&&&
&&&&&&字号
原标题:Oauth2.0协议曝漏洞 大量社交网隐私或遭泄露
  今晨,继OpenSSL漏洞后,开源安全软件再曝安全漏洞。新加坡南洋理工大学研究人员Wang Jing发现,Oauth2.0授权接口的网站存“隐蔽重定向”漏洞,黑客可利用该漏洞给钓鱼网站“变装”,用知名大型网站链接引诱用户登录钓鱼网站,一旦用户访问钓鱼网站并成功登陆授权,黑客即可读取其在网站上存储的私密信息。据悉,腾讯QQ、新浪微博、Facebook、Google等国内外大量知名网站受影响,360网络攻防实验室已紧急公布了修复方案,企业和个人用户均可通过360安全卫士防范该漏洞攻击。
  Oauth是一个被广泛应用的开放登陆协议,允许用户让第三方应用访问该用户在某一网站上存储的私密的信息(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。这次曝出的漏洞,可将Oauth2.0的使用方(第三方网站)的回跳域名劫持到恶意网站去,黑客利用XSS漏洞攻击就能随意操作被授权的账号,读取用户的隐私信息。像腾讯、新浪微博等社交网站一般对登陆回调地址没有任何限制,极易遭黑客利用。
  360网络攻防实验室表示,此次曝光的Oauth2.0漏洞影响范围有限,只有存在XSS漏洞的第三方网站使用了oauth验证后才能被成功劫持。不过,想要修复该漏洞,需要Oauth的提供方和使用oauth协议登陆的网站开发者同时行动,才能避免黑客攻击。对此,360公司紧急推出了修复方案,建议Oauth服务和使用者提高警惕,尽快通过以下方法检测并及时修复漏洞:
  1、 Oauth2.0提供方需要验证所有使用网站的回调地址,禁止非法参数如:多个域名、XSS攻击代码等敏感信息(修复难度较大,但是能最快控制风险),或增加回调地址签名验证,防止被篡改;
  2、 Oauth使用者,需要验证检测自己的网站是否存在XSS、URL跳转等web漏洞,并立即进行修复。
  此外,360网络攻防实验室还建议广大网友不要点击他人发来的带有Oauth字样的链接和网页内容,以免在各大网站修复漏洞前误入钓鱼网站,被黑客盗取登录认证信息。各大网站如果在修复漏洞过程中由任何问题,可随时私信联系@360网络攻防实验室。
(责编:曾亮、陈健)
善意回帖,理性发言!
使用其他账号登录:
恭喜你,发表成功!
请牢记你的用户名:,密码:,立即进入修改密码。
s后自动返回
5s后自动返回
恭喜你,发表成功!
5s后自动返回
最新评论热门评论
数码前沿|精彩博客
24小时排行&|&
人 民 网 版 权 所 有 ,未 经 书 面 授 权 禁 止 使 用
Copyright &
by .cn all rights reserved
人 民 网 版 权 所 有 ,未 经 书 面 授 权 禁 止 使 用
Copyright &
by .cn. all rights reserved}

我要回帖

更多关于 oauth2.0网页授权 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信