OAuth 2.0
1. 解决了什么问题
资源授权
用户在一个网站(资源服务器)注册了帐号,现在访问另一个网站在不注册账号的情况下使用资源服务器的注册信息注册登录。
在不对第三方应用暴露账号、密码的情况下,授权第三方应用访问受保护资源的解决方案。实际上就是如何获取访问资源服务器 REST API 的授权码。
可以扩展成业务系统自身的统一授权服务。
2. 什么是 OAuth 2.0
代理授权协议、框架。
本质是如何获取 token、如何使用 token。
只定义令牌颁发的几种流程,并没有定义怎么去认证。
OAuth 2.0 标准化了 Access Token 的请求和响应部分(RFC 6749)。
3. OAuth 2.0 相关方
客户应用(第三方应用)
资源服务器(业务系统)
授权服务器
资源拥有者(人)
用户通过客户凭证(帐号密码)登录资源服务器
用户操作客户端应用向授权服务器发起授权申请
用户再次确认允许选择授权资源(头像、用户名、好友等)
授权服务器颁发 Access Token
客户端应用每次访问资源服务器时,都携带该 token
资源服务器或者授权服务器对 token 做认证
4. 令牌(Tokens)
4.1 访问令牌
4.2 授权码
客户端发起授权请求后,授权服务器返回的允许申请访问令牌的授权码。
4.3 刷新令牌
令牌有时效,用于生成新的访问令牌。
4.4 Bearer Token
谁拿到 token 都可以访问资源。
4.5 Proof of Possesion(PoP) Token
具体权限
5. 怎么获取 token(token 获取流程)
5.1 授权码模式
用户在前端发起授权请求,通过由 user-agent(前端程序)向授权服务器获取到授权码。这时没有经过第三方客户端应用,可以保证用户帐号密码的安全。授权服务器通过回调函数返回授权码,该回调是第三方客户端程序的接口,根据这个 access token 后台请求授权服务器获取访问令牌。
5.2 简化模式(implicit grant)
前端请求授权服务器,直接返回访问令牌。
5.3 密码模式(Resource Owner Password Credentals Grant)
资源拥有者直接在三方应用上输入帐号密码,请求三方服务器,三方服务器再请求授权服务器,授权服务器返回访问令牌。
5.4 客户端模式(Client Credentials Grant)
服务器即资源拥有者,直接请求授权服务器,通过密钥获取访问令牌。用于后台服务间调用授权。
JWT - JSON Web Token
资源服务器校验 token 合法性,不去请求授权服务器。
自包含令牌,token 中包含用户信息等数据。遵循一定的数据格式。
OIDC(OpenID Connect)
在 OAuth 2.0 基础上做了扩展,支持认证。
Reference
版权声明: 本文为 InfoQ 作者【陈皮】的原创文章。
原文链接:【http://xie.infoq.cn/article/5780a713a3694c64a8708f031】。文章转载请联系作者。
评论