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. JavaScript的进阶之路(一)

    JavaScript由ECMAScript BOM DOM三部分组成 ECMAScript重要版本1,3,5,6,提供核心语言功能 DOM提供访问和操作网页内容的方法和接口 BOM提供与浏览器交互的的 ...

  2. 大V云集!参加首届阿里巴巴在线技术峰会的八大理由

    由阿里巴巴集团.阿里巴巴技术协会(ATA)和阿里云云栖社区联合举办的首届阿里巴巴在线技术峰会(Alibaba Online Technology Summit)将于7月19日-21日20:00-21: ...

  3. Python爬虫教程-32-Scrapy 爬虫框架项目 Settings.py 介绍

    本篇介绍项目开发的过程中,对 Setting 文件的配置和使用 Python爬虫教程-32-Scrapy 爬虫框架项目 Settings.py 介绍 settings.py 文件的使用 想要详细查看 ...

  4. 浏览器环境下的javascript DOM对象继承模型

    这张图是我直接在现代浏览器中通过prototype原型溯源绘制的一张浏览器宿主环境下的javascript DOM对象模型,对于有效学习和使用javascript DOM编程起到高屋建瓴的指导作用, ...

  5. Linux->Jdk1.8安装

    一.下载jdk 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二.解 ...

  6. 【Leetcode】【Medium】Permutations

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  7. 【Leetcode】【Medium】Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  8. HDU 3420 -- Bus Fair ACM

    Bus Fair Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  9. ubuntu16.4安装php7+apache2+mysql环境全过程记录

    1.安装apache2 sudo apt-get install apache2 2.安装php7 sudo apt-get install php7.0 3.apache 识别php插件(不是必须, ...

  10. ThreadLocal介绍

    作者:知乎用户链接:https://www.zhihu.com/question/23089780/answer/62097840来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...