Microsoft 标识平台中的 ID 令牌

ID 令牌由授权服务器颁发,其中包含的声明携带了有关用户的信息。 它们可以与访问令牌一起发送,也可以代替访问令牌发送。 使用 ID 令牌中的信息,客户端可以验证用户是否是其声称的身份。

第三方应用程序应理解 ID 令牌。 ID 令牌不得用于授权目的。 访问令牌用于授权。 ID 令牌提供的声明可以用于应用程序内部的用户体验、作为数据库中的键以及提供客户端应用程序访问权限。 有关 ID 令牌中使用的声明的详细信息,请参阅 ID 令牌声明参考。 有关基于声明的授权的详细信息,请参阅通过验证声明保护应用程序和 API

令牌格式

Microsoft 标识平台提供了两个版本的 ID 令牌:v1.0 和 v2.0。 这些版本确定令牌中的声明。 v1.0 和 v2.0 ID 令牌所携带的信息有所不同。 版本基于终结点,从该终结点处其接受请求。 新应用程序应使用 v2.0。

  • v1.0:https://login.microsoftonline.com/common/oauth2/authorize
  • v2.0:https://login.microsoftonline.com/common/oauth2/v2.0/authorize

示例 v1.0 ID 令牌

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IjdfWnVmMXR2a3dMeFlhSFMzcTZsVWpVWUlHdyIsImtpZCI6IjdfWnVmMXR2a3dMeFlhSFMzcTZsVWpVWUlHdyJ9.eyJhdWQiOiJiMTRhNzUwNS05NmU5LTQ5MjctOTFlOC0wNjAxZDBmYzljYWEiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9mYTE1ZDY5Mi1lOWM3LTQ0NjAtYTc0My0yOWYyOTU2ZmQ0MjkvIiwiaWF0IjoxNTM2Mjc1MTI0LCJuYmYiOjE1MzYyNzUxMjQsImV4cCI6MTUzNjI3OTAyNCwiYWlvIjoiQVhRQWkvOElBQUFBcXhzdUIrUjREMnJGUXFPRVRPNFlkWGJMRDlrWjh4ZlhhZGVBTTBRMk5rTlQ1aXpmZzN1d2JXU1hodVNTajZVVDVoeTJENldxQXBCNWpLQTZaZ1o5ay9TVTI3dVY5Y2V0WGZMT3RwTnR0Z2s1RGNCdGsrTExzdHovSmcrZ1lSbXY5YlVVNFhscGhUYzZDODZKbWoxRkN3PT0iLCJhbXIiOlsicnNhIl0sImVtYWlsIjoiYWJlbGlAbWljcm9zb2Z0LmNvbSIsImZhbWlseV9uYW1lIjoiTGluY29sbiIsImdpdmVuX25hbWUiOiJBYmUiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaXBhZGRyIjoiMTMxLjEwNy4yMjIuMjIiLCJuYW1lIjoiYWJlbGkiLCJub25jZSI6IjEyMzUyMyIsIm9pZCI6IjA1ODMzYjZiLWFhMWQtNDJkNC05ZWMwLTFiMmJiOTE5NDQzOCIsInJoIjoiSSIsInN1YiI6IjVfSjlyU3NzOC1qdnRfSWN1NnVlUk5MOHhYYjhMRjRGc2dfS29vQzJSSlEiLCJ0aWQiOiJmYTE1ZDY5Mi1lOWM3LTQ0NjAtYTc0My0yOWYyOTU2ZmQ0MjkiLCJ1bmlxdWVfbmFtZSI6IkFiZUxpQG1pY3Jvc29mdC5jb20iLCJ1dGkiOiJMeGVfNDZHcVRrT3BHU2ZUbG40RUFBIiwidmVyIjoiMS4wIn0=.UJQrCA6qn2bXq57qzGX_-D3HcPHqBMOKDPx4su1yKRLNErVD8xkxJLNLVRdASHqEcpyDctbdHccu6DPpkq5f0ibcaQFhejQNcABidJCTz0Bb2AbdUCTqAzdt9pdgQvMBnVH1xk3SCM6d4BbT4BkLLj10ZLasX7vRknaSjE_C5DI7Fg4WrZPwOhII1dB0HEZ_qpNaYXEiy-o94UJ94zCr07GgrqMsfYQqFR7kn-mn68AjvLcgwSfZvyR_yIK75S_K37vC3QryQ7cNoafDe9upql_6pB2ybMVlgWPs_DmbJ8g0om-sPlwyn74Cc1tW3ze-Xptw_2uVdPgWyqfuWAfq6Q

jwt.ms 中查看此 v1.0 示例令牌。

示例 v2.0 ID 令牌

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjFMVE16YWtpaGlSbGFfOHoyQkVKVlhlV01xbyJ9.eyJ2ZXIiOiIyLjAiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vOTEyMjA0MGQtNmM2Ny00YzViLWIxMTItMzZhMzA0YjY2ZGFkL3YyLjAiLCJzdWIiOiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFJa3pxRlZyU2FTYUZIeTc4MmJidGFRIiwiYXVkIjoiNmNiMDQwMTgtYTNmNS00NmE3LWI5OTUtOTQwYzc4ZjVhZWYzIiwiZXhwIjoxNTM2MzYxNDExLCJpYXQiOjE1MzYyNzQ3MTEsIm5iZiI6MTUzNjI3NDcxMSwibmFtZSI6IkFiZSBMaW5jb2xuIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiQWJlTGlAbWljcm9zb2Z0LmNvbSIsIm9pZCI6IjAwMDAwMDAwLTAwMDAtMDAwMC02NmYzLTMzMzJlY2E3ZWE4MSIsInRpZCI6IjkxMjIwNDBkLTZjNjctNGM1Yi1iMTEyLTM2YTMwNGI2NmRhZCIsIm5vbmNlIjoiMTIzNTIzIiwiYWlvIjoiRGYyVVZYTDFpeCFsTUNXTVNPSkJjRmF0emNHZnZGR2hqS3Y4cTVnMHg3MzJkUjVNQjVCaXN2R1FPN1lXQnlqZDhpUURMcSFlR2JJRGFreXA1bW5PcmNkcUhlWVNubHRlcFFtUnA2QUlaOGpZIn0.1AFWW-Ck5nROwSlltm7GzZvDwUkqvhSQpm55TQsmVo9Y59cLhRXpvB8n-55HCr9Z6G_31_UbeUkoz612I2j_Sm9FFShSDDjoaLQr54CreGIJvjtmS3EkK9a7SJBbcpL1MpUtlfygow39tFjY7EVNW9plWUvRrTgVk7lYLprvfzw-CIqw3gHC-T7IK_m_xkr08INERBtaecwhTeN4chPC4W3jdmw_lIxzC48YoQ0dB1L9-ImX98Egypfrlbm0IBL5spFzL6JDZIRRJOu8vecJvj1mq-IUhGt0MacxX8jdxYLP-KUu2d9MbNKpCKJuZ7p8gwTL5B7NlUdh_dmSviPWrw

jwt.ms 中查看此 v2.0 示例令牌。

令牌生存期

默认情况下,ID 令牌的有效期为 1 小时 - 1 小时后,客户端必须获取新的 ID 令牌。

可以调整 ID 令牌的生存期,控制客户端应用程序使应用程序会话过期的频率,以及要求用户再次进行身份验证(以无提示方式或交互方式)的频率。 有关详细信息,请参阅可配置的令牌生存期

验证令牌

要验证 ID 令牌,客户端可以检查令牌是否已被篡改。 它还可以验证证书颁发者,以确保正确的证书颁发者已发送回令牌。 由于 ID 令牌始终是 JWT 令牌,因此可以使用许多现有的库来验证这些令牌 - 建议使用其中的一个库来验证,而不要自行进行验证。 只有机密客户端才应验证 ID 令牌。 有关详细信息,请参阅通过验证声明保护应用程序和 API

公共应用程序(代码完全在不控制的设备或网络上运行,如用户的浏览器或家庭网络)不受益于验证 ID 令牌。 进行验证时,恶意用户可以截获并编辑用于验证令牌的密钥。

验证令牌上的签名后,应在 ID 令牌中验证以下 JWT 声明。 令牌验证库还可以验证以下声明:

  • 时间戳:iatnbfexp 时间戳全都应位于当前时间之前或之后(具体取决于需要)。
  • 受众:aud 声明应该与应用程序的应用 ID 匹配。
  • Nonce:有效负载中的 nonce 声明必须与进行初始请求时传递到 /authorize 终结点中的 nonce 参数匹配。

另请参阅

后续步骤

  • 查看 OpenID Connect 流,它定义了发出 ID 令牌的协议。