首页 > 解决方案 > 获取客户端的身份令牌

问题描述

使用 IdentitServer4 我为 Windows 应用程序创建了一个客户端。要调用另一个身份验证服务(即 AWS STS),我需要设置与我的 ID 服务器的联合并使用身份令牌。

是否可以为客户获取身份令牌?

以下代码给了我访问令牌,但身份令牌为空。

    var disco = await DiscoveryClient.GetAsync(Properties.Settings.Default.IdentityUrl);
    if (disco.IsError)
    {
      return false;
    }

    var tokenClient = new TokenClient(disco.TokenEndpoint, _executionContext.ClientID, _executionContext.Secret);
    var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api.v1");

    _executionContext.AgentToken = tokenResponse.AccessToken;  // OK
    _executionContext.IdentityToken = tokenResponse.IdentityToken; // NULL

标签: identityserver4

解决方案


不,根据定义,客户端不能为自己请求身份令牌。仅代表用户。从文档

用户

用户是使用注册客户端访问资源的人。

客户

客户端是一个从 IdentityServer 请求令牌的软件——用于验证用户(请求身份令牌)或访问资源(请求访问令牌)。

客户端无法为自己请求身份令牌的原因是因为它没有(也不能拥有)sub声明:

sub 声明的存在(或不存在)使 API 可以区分代表客户端的调用和代表用户的调用。

下面是一个关于如何使用密码授权代表用户请求身份令牌的示例。


推荐阅读