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. flex与相对定位在国内双核浏览器极速模式下的兼容性问题

    在国内的浏览器中,360浏览器,QQ浏览器等绝大部分都是双核浏览器.双核浏览器即拥有IE兼容内核和非IE极速内核两个内核,分别对应兼容模式和极速模式.兼容模式时使用IE内核,极速模式采用webkit内 ...

  2. Express (Routing、Middleware、托管静态文件、view engine 等等)

    1. Express 简介 Express 是基于 Node.js 平台,快速.开放.极简的 web 开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用. Express 不对 ...

  3. QQ 聊天机器人小薇发布!

    简介 XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动: 监听多个 QQ 群消息,发现有"感兴趣"的内容时通过图灵机器人进行智能回复 监 ...

  4. configure配置安装详解

    使用 ./configure --help 就可以查看到所有的配置选项. 1.--host=HOST指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.--host 指定 ...

  5. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

  6. docker images存放路径指定

    steps: 1. mkdir /home/docker(你想要docker存放image的目录) 2. systemctl stop docker 3. vi /usr/lib/systemd/sy ...

  7. 【转】关于色彩空间sRGB和Adobe RGB...

    以前对这个问题一直很困惑.... 下面采用问答形式.A:相机中的SRGB和ADOBE RGB有什么区别 ADOBE貌似颜色淡.什么时候有用处呢? B:不是这样的,ADOBE RGB的色域要比SRGB要 ...

  8. Detecting Client Connection in WCF Long Running Service (Heartbeat Implementation) z

    Download source - 45.3 KB Introduction Hello everyone! This is my first blog on WCF and I hope that ...

  9. C++ 类的存储方式以及虚函数表

    一.C++成员函数在内存中的存储方式 用类去定义对象时,系统会为每一个对象分配存储空间.如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间.按理说,如果用同一个类定义了10个对象,那么就 ...

  10. 电脑断电后Everything部分文件搜索不到的解决办法

    常规检查:查看选项→索引→NTFS,确认所有分区都[包含到数据库],确认后,再删除数据库文件,点击[强制重建] 下面方法是亲身经历,是断电造成的,费了不少时间才解决,现分享出来: 断电后,Everyt ...