获取客户端的身份令牌

时间:2018-08-25 02:03:45

标签: identityserver4

使用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

1 个答案:

答案 0 :(得分:1)

否,根据定义,客户端不能为其本身请求身份令牌。仅代表用户。来自docs

用户

  

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

客户

  

客户端是一种向以下设备请求令牌的软件:   IdentityServer-用于验证用户(请求   身份令牌)或用于访问资源(请求访问权限)   令牌)。

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

  

子声明的存在(或不存在)使API能够区分   在代表客户的通话和代表用户的通话之间。

这是example,说明如何使用密码授予代表用户请求身份令牌。

相关问题