OIDC是一个OAuth2上层的简单身份层协议。它允许客户端验证用户的身份并获取基本的用户配置信息。OIDC使用JSON Web Token(JWT)作为信息返回,通过符合OAuth2的流程来获取。
OAuth2与资源访问和共享有关,而OIDC与用户身份验证有关。
JWT包含Claims,它们是有关实体(通常是用户)的Claims(例如名称或电子邮件地址)和其他元数据。OIDC规范定义了一组标准的权利要求。这组标准声明包括姓名,电子邮件,性别,出生日期等。但是,如果要获取有关用户的信息,并且当前没有最能反映此信息的标准声明,则可以创建自定义声明并将其添加到令牌中。
认证服务返回的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直接返回给客户端,授权服务器不执行客户端身份验证。
授权请求
授权响应
之后就可以拿着ID Token
是上面两种模式的混合。可选response_type有:code id_token,code token,code id_token token。
本文链接:https://blog.nnwk.net/article/1560
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论