OAuth2 - 课本式说明


相关:
介绍
OAuth是关于授权的网络协议,而不是认证的。
OAuth下的几个名词:
Third-party application:第三方应用程序,又称为客户端Client
HTTP Service:HTTP服务提供商(请求授权的一方,或服务提供商)
Resource Owner:资源所有者,即用户
User Agent:用户代理,指浏览器
Authorization Server:认证服务器,即服务商专门用来处理认证的服务器。
Resource Server:资源服务器。
大体运行流程:
1、客户端请求用户授权
2、用户同意授权给客户端
3、客户端使用授权向认证服务器申请令牌
4、认证服务器返回令牌给客户端
5、客户端使用令牌访问资源服务器
6、资源服务器确认令牌无误,返回给客户端受保护的资源
其中 用户同意授权给客户端,才能获取令牌。
有4种模式:
authorization code 授权码模式
implicit 简化模式
resource owner password credentials 密码模式
client credentials 客户端模式
授权码模式
(A)用户访问客户端,客户端将导向到认证服务器
(B)认证服务器会询问用户是否授权
(C)用户选择授权后,认证服务器将导向回来(导向回来得URL,再B阶段客户端提供)同时,给了一个“授权码”
(D)客户端拿到授权码后,再后台,使用“授权码”向认证服务器申请“Token”
(E)认证服务器核对授权码后,返回给客户端一个“Token”,有得可能还会有“Refresh Token”。
客户端请求认证服务器授权得URL,格式如下:
GET /authorize? response_type=code &client_id=s6BhdRkqt3 &state=xyz &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 Host: server.example.com
参数说明:
response_type :授权类型,必选项
client_id:客户端id
redirect_uri:重定向得URI
scope:申请得权限范围
state:客户端得当前状态,可以指定任意值,认证服务器会原封不动得返回
“认证服务器”返回给“客户端”的URI,格式如下 :
HTTP/1.1 302 Found Location: code=SplxlOBeZQQYbYS6WxSbIA &state=xyz
返回的URL中,包含了一个参数“code”和一个参数“state”
code为授权码,该码的有效时间应该短,通常设置为10分钟,且只能使用一次,防止他人使用。
state参数,是认证服务器原封不动返回来的参数值。
“客户端”向“认证服务器”申请令牌的URI,格式为:
POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb &client_id=s6BhdRkqt3
grant_type:使用了哪种授权模式,使用”授权码“模式时,值为”authorization_code"
code:“认证服务器”给“客户端”的授权码
redirect_uri:“认证服务器”重定向回来要使用的URI
client_id:客户端ID
“认证服务器”向“客户端”返回“Token”的内容为:
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"example", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", "example_parameter":"example_value" }
其中
access_token:访问令牌
token_type:令牌类型
expires_in:过期时间,单位(秒)
refresh_token:更新令牌,用来获取下一次的令牌,可选
scope:权限范围
简化模式:
简化模式指,没有“授权码”这一步骤,认证服务器直接返回“令牌”。“令牌”对访问都可见。
“客户端”请求“认证服务器”授权的URI:
GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 Host: server.example.com
“认证服务器”返回给“客户端”的URI:
HTTP/1.1 302 Found Location: http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA &state=xyz&token_type=example&expires_in=3600
密码模式和客户端模式:略
参考资料:
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
https://www.cnblogs.com/linianhui/p/authentication-based-on-oauth2.html
http://ifeve.com/oauth2-tutorial-all/
*昵称:
*邮箱:
个人站点:
*想说的话: