【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0 (2)

不管哪一种授权方式,第三方应用申请令牌之前,都需要像微信公众号开发那样,必须先到系统备案,说明自己的身份,然后会拿到两个身份识别码:客户端 ID(client ID)和客户端密钥(client secret)。这是为了防止令牌被滥用,没有备案过的第三方应用,是不会也不可能拿到令牌的。

2.2 端点

Authorization Endpoint ,授权端点

Token Endpoint ,Token端点

2.3 Scope

代表资源所有者在被保护的资源那里的一些权限,可以把被保护的资源分为不同的scope,这个粒度由开发者自定义,常见的有角色

2.4 Access Token

用来访问被保护资源的凭据

代表了给客户端颁发的授权,也就是委托给客户端的权限

OAuth2.0没有对Token的格式和内容定义,只有有一个要求:Access-token要描述出资源所有者授予权限的范围,也就是scope,以及Access-token的有效期

2.5 Refresh Token

获取Access token的凭据

由授权服务器颁发

它是一个可选项

具备让客户端应用逐渐降低访问权限的能力

可以在Refresh Token请求重新获取Access Token时,做一个设计,根据实际需求,给一个权限越来越低的token

3.OpenId Connect 1.0

上一节说过,OAuth 2.0是一种授权机制,是一种委托协议,但是不是一个身份认证协议。OAuth2.0的Access Token不含有身份认证信息,也不是为客户端准备的,本身也不对客户端透明,Access Token真正的受众是被保护的资源。

​ 当然我们不排除一些简单的系统鉴权要求,它只需限制对是否具有有效安全令牌的用户的访问,并不需求身份认证。

​ OAuth2.0设计的Access Token不含有身份认证信息,但是JWT具有自包含特点,其实我们是可以把Access-Token设计为即具有身份信息,又包含授权信息。在一些简单的单体应用中,把身份认证和授权揉在一起,根据Access_Token解析身份信息和然后再根据身份信息,配合设计的权限规则(db存储)过滤请求,的确可以这样做,事实上有一些开源项目,包括我自己,都这样干过。

​ 在一些实际场景下,这种使用access-token作为身份认证的凭据是成立的,因为token是经过身份认证后,刚被创建的,再加上后续验证与数据存储的交互,可以确保无虞。

​ 但是如果是在OAuth2.0中,这并不是获取access-token的唯一方法。Refresh Token和assertions可以在用户不存在的情况下获取access token。而在某些情况下,用户无需身份验证即可获得access token。另外用户不存在,access-token通常还会存在很长时间。记住重要的一点:OAuth是一个授权协议,保护的是资源,突出一个保护,那么必须保证用户是存在的;access-token受众是受保护的资源,客户端是授权的提出者,因此受保护的资源不能仅通过token的单独存在来判断用户是否存在,因为 OAuth 协议的性质和设计,在客户端和受保护资源之间的连接上,用户是不可用的。

当应用程序需要知道当前用户的身份时,就需要进行身份认证。通常,这些应用程序代表该用户管理数据,并需要确保该用户只能访问允许他访问的数据。

目前最常见的身份验证协议是SAML2p、WS-Federation和OpenID Connect——SAML2p是最流行和部署最广泛的。

OpenID Connect是三者中最新的一个,但是却被认为是未来的发展方向,因为它对现代应用程序具有最大的潜力。它从一开始就为移动应用场景而构建,并被设计为对API友好。

OpenID Connect

是基于OAuth 2.0协议之上的简单身份层,是在OAuth2.0之上做的一个扩展,兼容OAuth2.0,身份验证和API访问这两个基本的安全问题被组合成一个协议——通常只有一次到安全令牌服务(STS)的往返,所以这里没有详细介绍OAuth2.0的授权流程的原因,因为OpenId Connect几乎包含了整个OAuth2.0

OAuth 2.0OpenID Connect1.0 映射表

OAuth2.0 OpenID Connect 1.0
资源所有者   用户  
客户端   依赖方  
授权服务器+被保护资源   身份提供商  

OpenId Connect 1.0包含如下主要内容:

3.1 ID Token

包含了用户的认证信息

3.2 UserInfo端点

获取用户信息

3.3 预设

一组标识身份的scopes和claims

profile

email

address

phone

3.4 OpenID Connect 流程

授权码流程-Authorization Code Flow

隐式流程-Implicit Flow

混合流程-Hybrid Flow

4.OpenID Connect 与 OAuth 2.0

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzygsf.html