如何从IdentityServer4调用受保护的API?

时间:2018-03-12 12:29:35

标签: identityserver4

我想通过调用IS验证的单独api来从身份服务器项目中拆分电子邮件服务。

我的问题是从身份服务器调用api。目前我还有额外的假冒'调用api的IdentityServer内的客户端。

以下是Client Credential Flow的标准选项。

  1. 获取令牌
  2. 返回令牌
  3. 致电api
  4. 检查令牌
  5. 返回数据
  6. Standard Client Credential Flow 但我想省略客户端。所以IdentityServer就是客户端。 我创造了一个假的' IS中的客户端,我认为这是错误的做法吗?

    IdentityServer

    中的MessageService.cs
     // Authenticating the fake client
     var disco = await DiscoveryClient.GetAsync("http://localhost:5000");
     var tokenClient = new TokenClient(disco.TokenEndpoint, "MailApiClient", "secret");
     var tokenResponse = await tokenClient.RequestClientCredentialsAsync("EmailScope");
     // Setting the token
     client.SetBearerToken(tokenResponse.AccessToken);
     var content = new StringContent(JsonConvert.SerializeObject(someMailModel));
     // Posting to api
     var response = await client.PostAsync(_emailSettings.RequestUri, content).ConfigureAwait(false);
    

    client inside IS

    假客户端使用IS进行身份验证,然后将带有令牌的消息发送给mailapi。 而是在IS中创建虚假客户端我希望IS是客户端本身。因此IdentityServer将在没有中间件客户端的情况下调用api。

    此外,其他一些客户也将使用MailApi。

1 个答案:

答案 0 :(得分:2)

有一个“IdentityServerTools”类,可以在IdentityServer中手动发出令牌。

How to protect Web API called by IdentityServer4 https://identityserver4.readthedocs.io/en/release/topics/tools.html