什么是 OIDC

7/26/2024 11:05:40 AM
198
0

OIDC是一个OAuth2上层的简单身份层协议。它允许客户端验证用户的身份并获取基本的用户配置信息。OIDC使用JSON Web Token(JWT)作为信息返回,通过符合OAuth2的流程来获取。

OAuth2与资源访问和共享有关,而OIDC与用户身份验证有关。

JWT包含Claims,它们是有关实体(通常是用户)的Claims(例如名称或电子邮件地址)和其他元数据。OIDC规范定义了一组标准的权利要求。这组标准声明包括姓名,电子邮件,性别,出生日期等。但是,如果要获取有关用户的信息,并且当前没有最能反映此信息的标准声明,则可以创建自定义声明并将其添加到令牌中。

Id token格式

认证服务返回的ID Token需要严格遵守JWT(JSON Web Token)的定义,下面是JWT(JSON Web Token)的定义细节,其中包含授权服务器对用户验证的Claims和其它请求的Claims:

简写 全程 必须 描述
iss Issuer Identifier 认证服务的唯一标识,一个区分大小写的https URL,不包含query和fragment组件
sub Subject Identifier iss提供的终端用户的标识,在iss范围内唯一,最长为255个ASCII个字符,区分大小写
aud Audience(s) 标识ID Token的受众,必须包含OAuth2的client_id,分大小写的字符串数组
exp Expiration time 超过此时间的ID Token会作废
iat Issued At Time JWT的构建的时间
auth_time Authentication Time 终端用户完成认证的时间
nonce nonce - 发送认证请求的时候提供的随机字符串,用来减缓重放攻击,也可以用来关联客户端Session。如果nonce存在,第三方应用必须验证nonce
acr Authentication Context Class Reference - 表示一个认证上下文引用值,可以用来标识认证上下文类
amr Authentication Methods References - 表示一组认证方法
azp Authorized party - 结合aud使用。只有在被认证的一方和受众(aud)不一致时才使用此值,一般情况下很少使用

授权

身份验证遵循以下三种方式;授权码方式(response_type=code)、隐式方式(response_type=id_token token或response_type=id_token)、混合方式。

response_type对应的身份验证方式:

response_type 方式
code 授权码
id_token 隐式
id_token token 隐式
code id_token 混合
code token 混合
code id_token token 混合

注意OAuth2为隐式类型定义token的响应类型,但OIDC不会使用此响应类型,因为不会返回ID Token。

隐式授权

隐式授权,所有Token都从授权端点返回。主要由浏览器中使用脚本语言实现的客户机使用。访问Token和ID Token直接返回给客户端,授权服务器不执行客户端身份验证。

  1. 客户端(RP)携带认证参数发送请求到授权服务器(OP)
  2. 授权服务器(OP)验证用户并得到用户批准
  3. 授权服务器(OP)携带用户相关信息+ID Token/Access Token返回到客户端(RP)
  4. 客户端(RP)验证ID Token和检索用户标识符

授权请求

  • response_type,必须,’id_token token’或’id_token’。无Access Token使用’id_token’
  • redirect_uri,必须,OP处登记的重定向地址
  • nonce,必须,隐式授权必须

授权响应

  • access_token,如果response_type是id_token可以不反回
  • token_type,固定为Bearer,
  • id_token,必须,ID Token
  • state
  • expires_in,可选,Access Token到期时间(s)

之后就可以拿着ID Token

 

混合授权

是上面两种模式的混合。可选response_type有:code id_token,code token,code id_token token。

全部评论



提问