OAuth2.0是一个开放授权(open authorization)标准,允许用户让第三方应用获取其在其他网站的授权码,而无需提供给第三方应用在某网站的账号与密码。

OAuth2.0授权流程

假设第三方应用为zhangguoli.cn,服务器提供商为example.com/,授权服务器、认证服务器和资源服务器可以是一个服务器。

上图对应的步骤如下:

① 用户访问第三方应用
② 第三方应用请求用户授权
③ 用户点击授权链接跳至服务器

...example.com/grant?app_id=12345&redirect_url=zhangguoli.cn/callback.php

app_id: 第三方应用在授权服务器的应用id,也可以称client_id
redirect_url: 回调地址,授权服务器授权之后跳转的地址

④ 输入用户名密码并同意授权
⑤ 授权服务器返回授权码code

...zhangguoli.cn/callback.php?code=xxxxxx

code: 授权网站发送的授权码

⑥ 第三方应用到认证服务器申请令牌

...example.com/oauth?app_id=12345&secret_key=xxxxx&code=xxxxx

secret_key: 授权服务器分配给第三方应用的密钥
这一步是在后台服务器上申请的,对用户是不可见的

⑦ 认证服务器发放令牌(accessToken)及OpenID等数据

accessToken=xxxx
refreshToken=yyy
OpenID=1024

accessToken: 访问令牌,相当于用户名+密码,能用于权限验证,有失效日期
refreshToken:更新令牌,使用该参数,下次服务器返回新的accessToken

⑧A 第三方应用使用令牌(AccessToken)去资源服务器请求数据,比如发布一条微博

...example.com/resource?accessToken=xxxx&create_weibo=wwww
⑧: 当⑦完成后,认证服务器将返回ccessToken、refreshToken、OpenID等参数,OpenID用来标识该用户在第三方应用的ID,第三方应用会保存这些参数,当授权过期再次授权的时候通过OpenID标识该用户已经授权过.
⑨ 返回资源,比如发送成功的标识或一张图片。

标签: OAuth2.0

已有 2 条评论

  1. 巧的嘞,我们系统的架构正打算改成这种取授权openid的

    1. 回头给我看看有没有错误啊

添加新评论