首页 > 解决方案 > 为什么 IdentityServer4 演示应用程序的隐式客户端流程会向我发回与 id_token 相同的 access_token?

问题描述

我正在使用参考IdentityServer4演示项目中定义的内存中客户端的变体,并且在我登录到 Identity Server 并被重定向后,URI 使得id_tokenaccess_token是完全相同的 JWT。

这是一个明智的行为吗?为什么你希望id_tokenandaccess_token永远一样?也许如果你不关心access_token

标签: oauth-2.0identityserver4openid-connect

解决方案


不确定您的意思是完全相同的 JWT。但是访问令牌和 ID 令牌都可以作为 JWT 令牌出现。

一个很好的例子是 Azure AD 的 OAuth 流。根据文档,成功的令牌响应以 JWT 格式(参考)返回一个访问令牌和一个 id 令牌(是的,Azure 确实为 OAuth auth.code flow 发送了一个)。但它们的内容可能不同。例如,一个可能是已签名的 JWT,而另一个则不是。

使用 JWT 的原因是它们的自包含性质。例如,可以从客户端应用程序端以及受保护的 API 端轻松完成令牌验证。

通常,如果访问令牌和 ID 令牌都是 JWT,它们可能会因声明而异。例如,受众声明 ( "aud") 可能会根据令牌的目标受众而有所不同。


推荐阅读