OAuth2
概念
OAuth 2.0 规范定义了一个授权(delegation)协议,OAuth2.0 不是认证协议。
OAuth解决的大部分问题在于Client和被访问的资源之间的连接上,在用户不存在的情况下,使用这种委托访问。
流程
上图ABCDE这5个步骤,既是完整的获取访问令牌的一个过程,其中:
- Client 为第三方应用程序,
- resource owner 为资源所有者
- user-agent 为类似浏览器的代理
- authorization server 授权服务器
- resource server 资源服务器
流程如下:
- 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的用户身份认证
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。
术语:
- 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。