OAuth

全称 open authorization

相关术语

举个例子,第三方应用想访问某用户关注的公众号。

资源所有者:用户
资源服务器:腾讯服务器
授权服务器:腾讯认证中心
客户端:第三方应用

三种认证方式

1. Resource Owner Password Credentials Grant(资源所有者密码凭据许可)

用户直接微信账号和密码给第三方应用。

2.Implicit Grant(隐式许可)

用户向腾讯认证中心获取一个 token 。
用户把这个 token 传给第三方应用,这样第三方应用有权访问用户关注的公众号。

缺点:taken 放在 URL 的 # 后面,叫 hash fragment,明文传输。
优点:只会停留在浏览器端, 只有 Javascript 能访问它,并且它不会再次通过 http request 发到别的服务器。第三方应用的后端服务器不用参与。

3. Authorization Code Grant(授权码许可)

用户向腾讯认证中心获取一个授权码。
用户把这个授权码给第三方应用。
第三方把这个授权码传给腾讯认证中心,获取 token 。
这样第三方应用有权访问用户关注的公众号。

更强保障:
只有在腾讯注册的第三方应用发出的 token 请求, 腾讯认证中心才认为合法;
还可以让授权码有时间限制,比如5分钟失效;
还有可以让授权码只能换一次 token 。

授权码许可实例

我在用新浪账号登录知乎时,客户端是知乎,授权服务器是新浪。
知乎会把我重定向到这样的页面:


登录知乎

这个页面的 URL 是:

https://api.weibo.com/oauth2/authorize?
scope=email&
state=37326432303439352d313332642d343436332d616434342d323038343833643833366234&
redirect_uri=http%3A%2F%2Fwww.zhihu.com%2Foauth%2Fcallback%2Fsina&
response_type=code&
client_id=3063806388

为了方便阅读,我把这条 URL 进行了多次回车。
第一行:oauth2 说明使用的授权机制就是 oauth2 。
第二行:scope 表示申请的权限范围,这里是邮箱。可选。
第三行:state 表示知乎的当前状态,可以指定任意值,新浪会原封不动地返回这个值。
第四行:redirect_uri 表示重定向 URI,可选项。
第五行:response_type 固定是 code ,因为是授权码许可,必填。
第六行:client_id 这里标识知乎,必填。

当点击允许后,新浪会将我导向到知乎事先指定的 redirect_uri,同时附上授权码:

https://www.zhihu.com/oauth/callback/sina?
state=37326432303439352d313332642d343436332d616434342d323038343833643833366234&
code=17ad14c9183a5d3fab259d1c96277638

这时知乎收到授权码后,附上 redirect_uri,向认证服务器申请令牌(token)。
这一步是在知乎后台的服务器上完成的,对用户不可见。

新浪核对了授权码和重定向 URI,确认无误后,向知乎发送访问令牌(access token)和更新令牌(refresh token)。

授权码有效期很短,通常设为10分钟,只能使用一次,再次会被新浪拒绝。
该码与客户端 ID 和重定向 URI,是一一对应关系。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • OAuth(开放授权)是一个开放标准,允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据...
    谁的青春不迷茫阅读 1,008评论 0赞 2
  • 开放式授权OAuth 一、什么是OAuth(开放式授权) OAuth: Open Authorization OA...
    我可能是个假开发阅读 1,293评论 0赞 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,454评论 25赞 708
  • 今年年初,第一份实习,接触了如何使用Facebook API, Twitter API...去获取数据,自动发个F...
    Jason_Yuan阅读 16,336评论 3赞 51
  • 导引篇 最近工作比较忙,今天晚上终于得空,总结总结UICollectionView的使用方法,以便以后的学习和使用...
    杨桃wd阅读 1,729评论 0赞 1

友情链接更多精彩内容