OIDC认证协议

OIDC认证协议

介绍

OIDC是基于OAuth2.0的身份认证协议.以下简单介绍下Oauth2.0: Oauth2.0 授权协议

OIDC

OpenID Connect 协议,允许第三方应用通过统一的认证中心进行身份认证,认证成功之后会返回ID token, 第三方应用可以据此建立会话。OIDC在OAuth2.0的基础上进行了身份认证的扩展,Oauth2.0拥有的授权功能,通常OIDC也可以支持。

关于认证和授权的区别

认证,Authentication,认证的目标是让第三方应用知道当前登录的用户是谁,在OIDC中第三方应用通过ID token能够直接解析出当前登录的用户信息。 授权,Authorization, 授权的目标是知道当前用户能干啥,可以不知道这个用户是谁,在OAuth2.0中用户在认证服务器中认证成功之后,会返回当前用户的Access Token,第三方应用可以拿着Access Token 来换取当前用户所需要的用户资源。

如果当前用户的Access Token 允许访问的资源中包含了用户信息,也可以根据Access Token换取用户信息,但是这种获取用户信息的方式是根据授予的权限访问资源,偏向于授权的概念。

OIDC中新增的概念

ID token:OIDC认证成功后返回的JWT,里面包含了用户信息 身份提供者(Identity Provider, IdP):负责用户身份认证并颁发ID token, access token。

相当于OAuth2.0的授权服务器,只是在OAuth 2.0的框架中,授权服务器的主要职责是处理授权请求和颁发访问令牌。它并不直接负责身份认证的过程,但它在实际应用中常常与身份认证过程相结合,与OIDC中的IdP相差不大

第三方应用(Relying Party, RP):通过IdP验证身份的应用,对应OAuth2.0的client 声明(Claims):ID token中包含的字段信息,例如用户的用户名、邮箱、登录时间、令牌的有效期等。这些信息由身份提供者(Identity Provider,IdP)在身份验证过程中生成,并传递给客户端(Relying Party,RP)。

Claims和Scopes Scope是客户端在发起授权请求时定义的一系列权限,决定了客户端能够访问用户的哪些信息或资源。OIDC定义了一些标准的Scope,如openid、profile、email等。Claims需要的信息也需要包含在scopes中才能获取到。

流程

OIDC的流程与OAuth2.0基本一致,支持OAuth2.0中的授权码模式,隐式授权模式,密码模式和隐式授权(OIDC1.1弃用,因为会隐式授权id token access token直接返回到前端并不安全) OIDC授权码流程 主要区别在于第六步中的响应结果中,相对于OAuth2.0多了ID token

{
  "access_token": "ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 3600,
  "id_token": "ID_TOKEN",
  "refresh_token": "REFRESH_TOKEN"
}

ID Token

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.POstGetfAytaZS82wHcjoTyoqhMyxXiWdR7Nn7A29DNSl0EiXLdwJ6xC6AfgZWF1bOsS_TuYI3OG85AmiExREkrS6tDfTQ2B3WXlrr-wp5AokiRbz3_oB4OxG-W9KcEEbDRcZc0nH3L7LzYptiy1PtAylQGxHTWZXtGz4ht0bAecBgmpdgXMguEIcoqPJ1n3pIWk_dUZegpqx0Lka21H6XxUTxiy8OcaarA8zdnPUnV6AmNP3ecFawIFYdvJB_cm-GvpCSbr8G8y_Mllj8f4x9nBH8pQux89_6gUY618iYv7tuPWBFfEbLxtF2pZS6YC1aSfLQxeNe8djT9YjpvRZAQ

这个ID Token由三部分组成,分别是:

  1. Header: 描述了JWT的签名算法和令牌类型。
  2. Payload: 包含了关于用户身份和认证状态的实际信息。
  3. Signature: 用于验证令牌完整性的签名。 以下是上述ID Token的解码后的Header和Payload部分: Header
{
  "alg": "RS256",
  "typ": "JWT"
}

Payload

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}

以下是Payload中各个字段的含义:

  • sub (Subject):主题,通常是用户的唯一标识符,例如用户ID。
  • name:用户的姓名。
  • admin:表示用户是否是管理员。
  • iat (Issued At):令牌的发行时间戳。

参考

OIDC协议的概述和工作流程

OAuth2.0 vs OIDC

Oauth2.0四种模式的场景

Oauth2.0

关于OIDC,一种现代身份验证协议

标签 :

相关文章

Oauth2.0授权协议

Oauth2.0授权协议

OAuth2.0是一种授权协议,**允许第三方应用在用户授权的情况下,在不暴露用户密码给第三方应用的前提下安全地访问服务器资源**,同时可以提供有限的权限范围,限制第三方应用能够访问的资源,提高了安全性。认证成功之后会返回Acces Token,第三方应用可以用Access Token换取所需要的资源。

更多
mysql中的字符集

mysql中的字符集

UTF-8是Unicode的一种实现方式,几乎包含世界上所有字符,方便国际化,通常使用此字符集。

更多