OAuth2.0的上风是安全,随意马虎集成各种三方运用,不用共享密码,各种技能栈对OAuth的支持比较好。

基本观点

首先弄清楚什么是认证,什么是授权。

认证Authentication(AuthN):是表明你是谁

phpoauth20关于OAuth20及相干技巧概念说明 Node.js

授权Authorization(AuthZ):讲的是你能做什么

然后须要澄清的是OAuth不是共享密码的机制和协议,乃至不是个登录流程,也不建立用户ID。
OAuth是一个共享授权的框架。

大致授权过程:OAuth客户端重定向到OAuth server,用户登录OAuth server,授权客户端(显示指定访问范围scope),天生access token给客户端。
OAuth客户端就可以利用该access token访问用户受保护的数据。
可随时撤销授权。
不用共享密码给第三方,这是最关键的。

OAuth的参与者

OAuth2.0的各参与者:

Resource Owner:常日是用户Client:要求访问的运用Resource Server: 用来存放受保护的数据和账号Authorization server:授权token的做事OAuth干系术语:

OAuth core在RFC 6749 中定义

授权过程称作 flow 或grant type

通过scope来划分不同权限,scope表示许可我做什么,是一组权限,用户可以用来许可(grant)运用代表他们干工作。

Claim:token中的key/value对,包含客户端信息,不在OAuth core中定义。

对scopes和claims的标准化:

医疗领域

Heart working group http://openid.net/wg/heartFHIR http://www.h17.org/implement/standards/fhir

金融领域:

Finacial API http://openid.net/wg/fapi

通过access token答应运用访问受保护的数据。

OAuth core只规定了比较大略的定义,但是OAuth可扩展,各个供应商可以有不一样的实现。

关于Token

Access token :运用用来访问受保护的数据的一组字符串,没有正式的格式哀求;代表详细的scope和过期韶光;被owner授权。

Refresh token:当access token过期的时候,运用用来要求新的access token;也用来处理用户deactive的情形。

ID token:OpenId connect core中定义,针对用户profile信息而设计

JSON Web Token:简写为JWT RFC 7519中定义,给没有标准格式的token定义了格式,个中定义了:

iss 发行者,sub:subject(user),aud:audience谁来利用这个token,exp token过期韶光OAuth和别的技能比较:

1.SAML:自2002年定义,紧张用来做单点登录(SSO)。
基于XML,有比较重的有效载荷payload,以是对移动端不友好,不是设计用来做代理访问的。
OAuth有saml扩展。

2.API key:大略,通用,随意马虎实现,难于管理和刷新。

3.Account id +secret :和上面的API key 类似。

4.OAuth2.0:随意马虎代理可选择的访问权限,随意马虎撤销授权,通用,被很多技能栈支持,不随意马虎理解。
OAuth2.0可用于用户或设备及做事。

5.OpenID connect(OIDC): 在OAuth之上的大略的ID扩展,定义了共享的详细字段(地址,电话号码,email等),只用于用户。

Grant Type分类

1.授权码的办法

Authorization code:是最常用的grant办法,基本流程如下

2.隐式指定

Implicit:常用于web app和移动app,基本流程如下

3.客户端凭据

Client credentials:常用于系统对系统的访问

OAuth的endpoint:

OAuth core只定义了两个端点:

/authorize 用户(资源拥有者)用来给运用授权,可以返回授权码或access token/token 运用用来交流授权码或刷新token

在RFC 7009中定义了废除token的端点:

/revoke 废除token,对access/refresh token都有效

在RFC 7662中定义了查看token的端点:

/introspection 查看token ,是否active ,是否已回收,是否有效

在RFC 7591中定义了注册新的客户真个端点:

/register 创建OAuth clients(client_id,client_secret)用来配置新的运用或用户

在OpenID Connect Core中定义了获取用户信息的端点:

/userinfo 获取用户profile

还在事情中的草案,用于做事端创造:

/ .well-known/openid-configuration框架和措辞对OAuth2.0的支持

Spring security

对OAuth有良好的支持,详细情形参照网站

NodeJS

Github上开源的NodeJS库

PHP

OAuth2.0 server,基于PHP的OAuth2做事器