关于 OAuth2.0
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
29310178-5a7a91cc-81df-11e7-9468-b66e150bfba1.png
步骤解释:
(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源。
微信 OAuth
在微信里的 OAuth 其实有两种:公众平台网页授权获取用户信息、开放平台网页登录。
它们的区别有两处,授权地址不同,scope
不同。
-
公众平台网页授权获取用户信息
授权 URL:
https://open.weixin.qq.com/connect/oauth2/authorize
Scopes:snsapi_base
与snsapi_userinfo
-
开放平台网页登录
授权 URL:
https://open.weixin.qq.com/connect/qrconnect
Scopes:snsapi_login
他们的逻辑都一样:
- 用户尝试访问一个我们的业务页面,例如:
/user/profile
- 如果用户已经登录,则正常显示该页面
- 系统检查当前访问的用户并未登录(从 session 或者其它方式检查),则跳转到跳转到微信授权服务器(上面的两种中一种授权 URL),并告知微信授权服务器我的回调URL(redirect_uri=callback.php),此时用户看到蓝色的授权确认页面(
scope
为snsapi_base
时不显示) - 用户点击确定完成授权,浏览器跳转到回调URL:
callback.php
并带上code
:?code=CODE&state=STATE
。 - 在
callback.php
中得到code
后,通过code
再次向微信服务器请求得到 网页授权 access_token与openid
- 你可以选择拿
openid
去请求 API 得到用户信息(可选) - 将用户信息写入 SESSION。
- 跳转到第 3 步写入的
target_url
页面(/user/profile
)。
逻辑组成
从上面我们所描述的授权流程来看,我们至少有3个页面:
- 业务页面,也就是需要授权才能访问的页面。
- 发起授权页,此页面其实可以省略,可以做成一个中间件,全局检查未登录就发起授权。
- 授权回调页,接收用户授权后的状态,并获取用户信息,写入用户会话状态(SESSION)。
开始之前
在开始之前请一定要记住,先登录公众号后台,找到边栏 “开发” 模块下的 “接口权限”,点击 “网页授权获取用户基本信息” 后面的修改,添加你的网页授权域名。
如果你的授权地址为:
http://www.abc.com/xxxxx
,那么请填写www.abc.com
,也就是说请填写与网址匹配的域名,前者如果填写abc.com
是通过不了的。
网友评论