OAuth2
概念
OAuth 2.0 规范定义了一个受权(delegation)协议,OAuth2.0 不是认证协议。浏览器
OAuth解决的大部分问题在于Client和被访问的资源之间的链接上,在用户不存在的状况下,使用这种委托访问。安全
流程

上图ABCDE这5个步骤,既是完整的获取访问令牌的一个过程,其中:服务器
- Client 为第三方应用程序,
- resource owner 为资源全部者
- user-agent 为相似浏览器的代理
- authorization server 受权服务器
- resource server 资源服务器
流程以下:ide
- A) Client使用浏览器(User-Agent)访问Authorization server。也就是用浏览器访问一个URL,这个URL是Authorization server提供的,访问的Client须要提供(客户端标识client_id,受权范围scope,本地状态state和redirect_uri)这些参数。
- B) Authorization server验证Client在(A)中传递的参数信息,若是无误则提供一个页面供Resource owner登录,登录成功后选择Client能够访问Resource server的哪些资源以及读写权限。
- C) 在(B)无误后返回一个受权码(Authorization Code)给Client。
- D) Client拿着(C)中得到的受权码(Authorization Code)和(客户端标识、redirect_uri等信息)做为参数,请求Authorization server提供的获取access token。
- E) Authorization server返回access token和可选的refresh token 以及令牌有效时间等信息给Client。
- F) client拿到access token后就能够去resources server访问resource owner的资源
OIDC
定义了一种基于OAuth2的用户身份认证spa
OIDC的核心在于在OAuth2的受权流程中,一并提供用户的身份认证信息(ID Token)给到第三方客户端,ID Token使用JWT格式来包装,得益于JWT(JSON Web Token)的自包含性,紧凑性以及防篡改机制,使得ID Token能够安全的传递给第三方客户端程序而且容易被验证。此外还提供了UserInfo的接口,用于获取用户的更完整的信息代理
流程
- RP发送一个认证请求给OP;
- OP对EU进行身份认证,而后提供受权;
- OP把ID Token和Access Token(须要的话)返回给RP;
- RP使用Access Token发送一个请求UserInfo EndPoint;
- UserInfo EndPoint返回EU的Claims。
术语:server
- EU:End User:一我的类用户。
- RP:Relying Party ,用来代指OAuth2中的受信任的客户端,身份认证和受权信息的消费方;
- OP:OpenID Provider,有能力提供EU认证的服务(好比OAuth2中的受权服务),用来为RP提供EU的身份认证信息;
- ID Token:JWT格式的数据,包含EU身份认证的信息。
- UserInfo Endpoint:用户信息接口(受OAuth2保护),当RP使用Access Token访问时,返回受权用户的信息,此接口必须使用HTTPS
- AuthN & AuthZ: AuthN表明authentication AuthZ 表明authrization
