OpenID Connect Core 1.0(二)ID Token
2、ID Token(ID Token)
OpenID Connect主要是对OAuth 2.0 能够使得终端用户通过ID Token的数据结构进行验证。当客户端和潜在的其他请求声明,ID Token包含声明的安全令牌并能在授权服务器中验证一个终端用户。ID Token表现为一个JSON Web Token(JWT)令牌。
以下对于所有OAuth 2.0流程使用的被OpenID Connect使用的ID Token的声明:
iss
必需的。响应的发行者的发行标识符。iss的值是使用 https scheme 区分大小写的URL,包含scheme、host和可选的端口号和路径、组件和任何查询或片段组件。
sub
必需的。 Subject标识符。由客户端使用本地唯一的从不在发行给终端用户期间重新分配的标识符,例如,24400320 或 AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4 。它长度不能超过255个ASCII字符。sub的值是对大小写敏感的字符串。
aud
必需的。ID Token的消费者。作为消费值它必须包含在OAuth 2.0的依赖方的client_id中。它也可能包含其他消费者的标识符。在一般情况下,aud值是一个大小写敏感的字符串的数组。在常见的只一个消费者特殊情况,aud可能是一个单一大小写敏感的字符串值。
exp
必需的。在有效时间过期之后,ID Token不得接受处理。这个参数要求必须在当前日期/时间 到 过期日期/时间中列出的值。考虑到时钟不精确,实现者可能提供一个通常不超过几分钟大约值。exp值是一个JSON的数字,是从1970-01-01 t0:0:0z UTC,到某一日期/时间来度量的秒数。参看 RFC 3339 [RFC3339] 中关于日期/时间的详细信息和UTC的规定。
iat
必需的。JWT发布的时间。它的值是一个JSON值代表的秒数数字,代表从1970-01-01 t0:0:0z UTC至某一UTC日期/时间之间计算的。
auth_time
终端用户验证时间。它的值是一个JSON值代表的秒数数字,是从1970-01-01 t0:0:0z UTC至某一UTC日期/时间来计算的。当一个max_age请求设置或者当auth_time请求作为一个基本要求,那么这一声明就是必需的;否则,它是可选的。(auth_time 声明语义对应OpenID 2.0 PAPE (OpenID.PAPE) auth_time 响应参数。)
nonce
用于关联客户端会话ID Token字符串值,以减轻重播攻击。nonce值在验证请求ID Token过程中是不会修改。如果存在ID Token,客户端必须验证发送的nonce值和在验证请求参数发送达时的nonce值是否相等。如果nonce出现在验证请求中,授权服务器必须在ID Token认证请求中包含一个nonce值。授权服务器应该执行使用nonce相应的处理。nonce值是一个大小写敏感的字符串。
acr
可选的。验证上下文类参考。字符串指定验证上下文类的参考值,在满足验证识别时验证上下文类使用。值“0”表示终端用户验证不符合ISO/IEC 29115 ISO29115一级要求。例如,验证使用的浏览器cookie是其中之一,例子使用“0级”是合适的。认证与 0级不应该用于授权访问的任何有值的资源。(这相当于OpenID 2.0 PAPE (OpenID.PAPE) nist_auth_level 0)。acr是一个用绝对URI或一个RFC 6711 (RFC6711) 注册的名字; 注册名称不得使用一个和已经注册的有不同的意义。相关方使用此声明需要达成一致的意义值,这可能是上下文相关的。acr值是一个大小写敏感的字符串。
amr
可选的。验证方法引用。进行验证方法时用于验证的JSON数组标识符字符串。例如,这些值可能包含密码和OTP验证方式。amr声明定义中特定值的使用,超出了本规范的范围。相关方使用此声明需要达成一致意义值,这可能是上下文相关的。amr值是一个组大小写敏感的字符串。
azp
可选的。授权方——发行ID Token的一方。如果存在,它必须包含OAuth 2.0 客户ID的一方。Claim 只是在ID Token只有一个消费值,和消费者来源不同的授权方时需要。这可能包含在即使授权方是相同的唯一的消费者。azp 值是一个大小写敏感的字符串,包含一个StringOrURI值。
ID Token可能包含其他声明。使用时必须忽略任何不理解声明。参照 3.1.3.6 ,3.3.2.11 ,5.1 ,7.4部份规范定义的附加声明。
使用ID Token必须使用JES签名或分别使用JWS和JWE加密后签名(可选),从而提供认证的、完整性、不可抵赖性和可选,保密,在16.14节。如果ID Token是加密的,它必须签名然后加密,结果是一个嵌套JWT(JWT中定义) 。ID Token不得使用一个none作为alg值,除非响应类型没有从授权终结点返回ID Token (如在使用授权码流程) 和客户明确使用一个没有登记时间请求。
ID Token不应使用 JWS or JWE x5u,x5c,jku,or jwk Header Parameter字段。相反,应使用提前通过发现和注册参数的引用keys(第十节)。
下面是一个ID Token声明集的非规范化的例子(JWT声明集):
{
"iss": "https://server.example.com",
"sub": "24400320",
"aud": "s6BhdRkqt3",
"nonce": "n-0S6_WzA2Mj",
"exp": 1311281970,
"iat": 1311280970,
"auth_time": 1311280969,
"acr": "urn:mace:incommon:iap:silver"
}
OpenID Connect Core 1.0(二)ID Token的更多相关文章
- OpenID Connect Core 1.0(一)介绍
IdentityServer4是基于OpenID Connect and OAuth 2.0框架,OpenID Connect Core 1.0是IdentityServer4最重要的文档 By 道法 ...
- OpenID Connect Core 1.0(九)声明(Claims)
5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接 ...
- OpenID Connect Core 1.0(六)使用隐式验证流
3.2 使用隐式验证流(Authentication using the Implicit Flow) 本节描述如何使用隐式流程执行验证.使用隐式流程时,所有令牌从授权终结点返回:不使用令牌终结点返回 ...
- OpenID Connect Core 1.0(五)使用授权码流验证(下)
3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...
- OpenID Connect Core 1.0(四)使用授权码流验证(上)
3.1 使用授权码流验证(Authentication using the Authorization Code Flow) 本节描述如何使用授权码流执行验证.当使用授权码流时,会从令牌终结点返回的所 ...
- OpenID Connect Core 1.0(三)验证
OpenID Connect执行终端用户登录或确定终端用户已经登录的验证工作.OpenID Connect 使服务器以一种安全的方式返回验证结果.所以客户可以依靠它.出于这个原因,在这种情况下客户被称 ...
- OpenID Connect Core 1.0(七)使用混合流验证
3.3 使用混合流验证(Authentication using the Hybrid Flow) 本节描述如何使用混合流执行验证.当使用混合流(Hybrid Flow)时一些令牌从授权端点返回,另一 ...
- OpenID Connect Core 1.0(八)从第三方发起登录
在某些情况下,登录流程由一个OpenID提供者或其他方发起,而不是依赖方(RP).在这种情况下,发起者重定向到RP在发起登录终结点,RP的请求验证请求发送到指定的OP.这个发起登录终结点可以在RP深度 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
随机推荐
- flask跨域
from flask import Flask from flask_cors import CORS, cross_origin app = Flask(__name__) CORS(app) @a ...
- thinkphp5设置404页面不跳转
thinkphp5设置404页面的步骤: 1. 首先关闭调试模式,即配置application/config文件,使'app_debug' => false 2. 添加自定义404页面跳转地址, ...
- new Date(年-月)时间是8点
new Date('2018-02')获取的小时是8时解决new Date('2018-2')获取的小时是0时
- HTML 简单日历制作方法
新手一枚,不会写什么高大上的博文,一些平时做的小练习,献丑 <!doctype html> <html> <head> <meta charset=" ...
- 考勤机sql语句
考勤机sql语句 SELECT checkinout.id as 序号 ,checkinout.pin as 打卡编号,userinfo.name 姓名, checkinout.checktime 签 ...
- HTML,javascript,image等加载,DOM解析,js执行生命周期
- SVNKit学习——Setting Up A Subversion Repository 创建仓库(三)
所谓Setting Up A Subversion Repository,就是在Subversion所在的服务器上创建一个仓库,说白了就是在磁盘上建一个特殊的目录,这里我以windows举例. 1.使 ...
- 【转】PBOC3.0和PBOC2.0标准规范异同分析
2013年2月,中国人民银行发布了<中国金融集成电路(IC)卡规范(V3.0)>(以下简称PBOC3.0),PBOC3.0是在中国人民银行2005年颁布的<中国金融集成电路(IC)卡 ...
- 【Leetcode】【Medium】Unique Paths II
Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...
- HTTP(一)
HTTP(一) http php http请求 HTTP请求:请求行.消息报头.请求正文.格式如下: Method Request-URI HTTP-Veraion CRLF 参数说明 Method ...