Oauth2协议简介

OAuth是一个关于授权的开放网络标准,目前的版本是2.0。通过这个网络标准,一个第三方应用(客户端)可以获取资源所有者(用户)服务提供商(为用户提供服务的服务商)保存的特定资源。在这个标准中,第三方应用不能直接登录服务提供商资源所有者只负责做是否授权以及授权哪些资源的决策,根据决策结果,第三方应用可以获得有时效、有授权范围的令牌,并通过令牌从服务供应商那里获得特定的资源。

整片文章分为两部分,这一部分介绍OAuth2的原理。下一篇会介绍一种基于SpringSecurity5的实现方式。

主要参考材料为:RFC_6749

1 OAuth2介绍

1.1 角色(Roles)

1、resource owner---资源所有者,也可以被称为“用户”

2、resource server---资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

3、client | relying party---第三方应用,希望获得资源所有者数据的服务方,也会被称为“客户端”

4、authorization server | open id provider---认证服务器,负责认证用户的身份,在用户授权之后,会将令牌发送给客户端

1.2 流程(Protocol Flow)

Protocol Flow

(A)用户在使用客户端,客户端向用户提出要用户授权客户端的请求。

(B)用户首先通过认证服务器的身份认证,然后在认证服务器完成对客户端的授权。

(C)客户端使用上一步获得的授权,向认证服务器申请令牌。

(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

(E)客户端使用令牌,向资源服务器申请获取资源。

(F)资源服务器确认令牌无误,同意向客户端开放资源。

1.3 被授权的授权(Authorization Grant)

这里grant是名词的含义,指的是通过用户的授权行为,客户端获得的"能够用来从认证服务器获取令牌(Accees token)"的凭证(Authorization Grant)。有四种方式,在看这四种方式的具体流程之前,最好先看下1.4章,理解token。

1.3.1 授权码模式(Authorization Code)

授权码模式用于获取访问令牌和刷新令牌,并针对机密客户端进行了优化。由于这是基于重定向的流程,客户端必须能够与资源所有者的用户代理(通常是Web浏览器)进行交互,并能够从授权服务器接收传入的请求(通过重定向)。

User-Agent一般指浏览器

Authorization Code Flow

(A)用户访问客户端,客户端重定向到认证服务器。

(B)用户通过身份认证,然后决策授权的范围以及时限。

(C)认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。

(D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

下面三种方式不太常用,这里就不做详细介绍了。

1.3.2 简化模式(Implicit)

1.3.3 密码模式(Resource Owner Password Credentials)

1.3.4 客户端模式(Client Credentials)

1.4 访问令牌(Access Token) & 更新令牌(Refresh Token)

1.4.1 访问令牌

访问令牌是用于访问受保护资源的凭据。访问令牌是发布给客户端的授权的字符串,表示资源所有者对特定范围和持续时间进行的授权,并由资源服务器和授权服务器来保证授权的正确实施。

1.4.2 更新令牌

刷新令牌是用于获取访问令牌的凭据。刷新令牌由授权服务器颁发给客户端,并用于在当前访问令牌变得无效或过期时获取新的访问令牌,或者获得具有相同或更窄范围的附加访问令牌(访问令牌可能具有较短的生命周期和比资源所有者授权的权限更少)。颁发刷新令牌是可选的,由授权服务器自行决定。如果授权服务器发出刷新令牌,则在发出访问令牌时被包括。刷新令牌是表示资源所有者授予客户端的授权的字符串。
授权信息。与访问令牌不同,刷新令牌仅用于授权服务器,并且不会发送到资源服务器。


Refreshing an Expired Access Token

(A)用户在使用客户端,客户端向用户提出要用户授权客户端的请求。

(B)用户首先通过认证服务器的身份认证,然后在认证服务器完成对客户端的授权。

(C)客户端使用访问令牌,向资源服务器发起请求。

(D)资源服务器返回,被请求的资源。

(E)客户端使用访问令牌,向资源服务器发起请求。

(F)资源服务器发现令牌有问题,返回错误。

(G)客户端使用更新令牌,向授权服务器发起请求,希望获取新的访问令牌。

(H)授权服务器返回新的访问令牌。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 1. 微服务架构介绍 1.1 什么是微服务架构? 形像一点来说,微服务架构就像搭积木,每个微服务都是一个零件,并使...
    静修佛缘阅读 6,678评论 0 39
  • OAuth 是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版...
    badcyc阅读 275评论 0 0
  • 简介&目录 下一章44)举刀相向(日记) 43)妹家遭遇(日记) 2008年4月15日 阴 在二姐家,住得十分不安...
    上林叶阅读 303评论 2 3
  • (1) 女孩安静地靠着车窗坐下,旁边用书包留着一个座位。在这之前,她都是选择一个人待着。时节已入深秋,可是A市丝毫...
    一斋札记阅读 395评论 0 1