OpenID Connect的简称,OIDC=(Identity, Authentication) + OAuth 2.0。它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。咱们都知道OAuth2是一个受权协议,安全
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。服务器
RP发送一个认证请求给OP;
OP对EU进行身份认证,而后提供受权;
OP把ID Token和Access Token(须要的话)返回给RP;
RP使用Access Token发送一个请求UserInfo EndPoint;
UserInfo EndPoint返回EU的Claims。数据结构
IDToken 受权服务器提供的包含用户信息(由一组Cliams构成以及其余辅助的Cliams)的JWT格式的数据结构ide
iss = Issuer Identifier:必须。提供认证信息者的惟一标识。通常是一个https的url(不包含querystring和fragment部分)。
sub = Subject Identifier:必须。iss提供的EU的标识,在iss范围内惟一。它会被RP用来标识惟一的用户。最长为255个ASCII个字符。
aud = Audience(s):必须。标识ID Token的受众。必须包含OAuth2的client_id
exp = Expiration time:必须。过时时间,超过此时间的ID Token会做废再也不被验证经过。
iat = Issued At Time:必须。JWT的构建的时间。
auth_time = AuthenticationTime:EU完成认证的时间。若是RP发送AuthN请求的时候携带max_age的参数,则此Claim是必须的。
nonce:RP发送请求的时候提供的随机字符串,用来减缓重放攻击,也能够来关联ID Token和RP自己的Session信息。
acr = Authentication Context Class Reference:可选。表示一个认证上下文引用值,能够用来标识认证上下文类。
amr = Authentication Methods References:可选。表示一组认证方法。
azp = Authorized party:可选。结合aud使用。只有在被认证的一方和受众(aud)不一致时才使用此值,通常状况下不多使用。加密
兼容众多的已有的IDP(身份提供商),好比基于SAML的、基于WS-Federation的等等已有的身份认证系统,均可以做为OIDC的OP存在。总结一下OIDC有那些特性和好处吧:
OIDC使得身份认证能够做为一个服务存在。
OIDC能够很方便的实现SSO(跨顶级域)。
OIDC兼容OAuth2,可使用Access Token控制受保护的API资源。
OIDC能够兼容众多的IDP做为OIDC的OP来使用。
OIDC的一些敏感接口均强制要求TLS,除此以外,得益于JWT,JWS,JWE家族的安全机制,使得一些敏感信息能够进行数字签名、加密和验证,进一步确保整个认证过程当中的安全保障。url