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