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的更多相关文章

  1. OpenID Connect Core 1.0(一)介绍

    IdentityServer4是基于OpenID Connect and OAuth 2.0框架,OpenID Connect Core 1.0是IdentityServer4最重要的文档 By 道法 ...

  2. OpenID Connect Core 1.0(九)声明(Claims)

    5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接 ...

  3. OpenID Connect Core 1.0(六)使用隐式验证流

    3.2 使用隐式验证流(Authentication using the Implicit Flow) 本节描述如何使用隐式流程执行验证.使用隐式流程时,所有令牌从授权终结点返回:不使用令牌终结点返回 ...

  4. OpenID Connect Core 1.0(五)使用授权码流验证(下)

    3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...

  5. OpenID Connect Core 1.0(四)使用授权码流验证(上)

    3.1 使用授权码流验证(Authentication using the Authorization Code Flow) 本节描述如何使用授权码流执行验证.当使用授权码流时,会从令牌终结点返回的所 ...

  6. OpenID Connect Core 1.0(三)验证

    OpenID Connect执行终端用户登录或确定终端用户已经登录的验证工作.OpenID Connect 使服务器以一种安全的方式返回验证结果.所以客户可以依靠它.出于这个原因,在这种情况下客户被称 ...

  7. OpenID Connect Core 1.0(七)使用混合流验证

    3.3 使用混合流验证(Authentication using the Hybrid Flow) 本节描述如何使用混合流执行验证.当使用混合流(Hybrid Flow)时一些令牌从授权端点返回,另一 ...

  8. OpenID Connect Core 1.0(八)从第三方发起登录

    在某些情况下,登录流程由一个OpenID提供者或其他方发起,而不是依赖方(RP).在这种情况下,发起者重定向到RP在发起登录终结点,RP的请求验证请求发送到指定的OP.这个发起登录终结点可以在RP深度 ...

  9. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

随机推荐

  1. tp3.2开启允许跨域

    在入口文件<?PHP下加上 header('Access-Control-Allow-Origin:*');header("Access-Control-Allow-Headers: ...

  2. COGS2216 你猜是不是KMP

    第一道自己写的FFT...... 不知为啥这题在网上找不到题解......真是麻烦,害得我推了半天...... 还是写个简要题解吧...... 首先把S和T拆成序列,a~z分别对应成1~26,?是0, ...

  3. 11.6NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 100 = 300\) 实际得分:\(100 +100 +100 = 300\) 学OI两年终于AK了一次qwq(虽然题目炒鸡水..) 纪念一下这令人激 ...

  4. vue中数组删除,页面没重新渲染

    创建一个组件时,数据类型是数组,在删除这个数组中的数据时,数组中的数据是对的,但页面渲染的数据却不对. 举例:(不一定复现) <ul> <li v-for="(item, ...

  5. 用CSS隐藏页面元素的5种方法

    1.opacity设置一个元素的透明度只是从视觉上隐藏元素,对页面布局还是有影响,读屏软件会原样读出 2.visibility设置为hidden将隐藏我们的元素,对网页布局还是起作用,子元素也会被隐藏 ...

  6. postgres备份数据库

    1. psql --help psql is the PostgreSQL interactive terminal. Usage: psql [OPTION]... [DBNAME [USERNAM ...

  7. MySQL主从复制与读写分离概念及架构分析

    1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...

  8. c# 依赖注入之---反射(转)

    详细请看http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 定义一个接口,和两个类(实现该接口) IButton: using ...

  9. python 中的list&tuple

    list Python内置的一种数据类型是列表:list>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classm ...

  10. MYSQL 升序排序但值为0的排最后

    转载 http://blog.csdn.net/looksun/article/details/51445205 如一张表的数据如下: 需要根据gz列的值进行升序排序,但值为0的排在最后面,即最终结果 ...