【发布时间】:2017-10-26 16:17:11
【问题描述】:
我有一个 IdentityServer、一个 Web Api 和一个最终将成为 SPA 的 MVCClient。 (.Net Core 2)
我的 MVCClient 混合了授权和非授权操作(或页面)。我能够从 IdentityServer 成功调用并获取令牌(服务器到服务器)并验证它是否有效。使用基于他们提供的示例的以下行。
public async Task<IActionResult> CallApiWithClientToken()
{
var discovery = await DiscoveryClient.GetAsync("http://localhost:<myport>");
// request token
var tokenClient = new TokenClient(discovery.TokenEndpoint, "inventoryApp", "mysecret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("invAPIScope");
var client = new HttpClient();
client.SetBearerToken(tokenResponse.AccessToken);
var content = await client.GetAsync(_apiUrl + "/testidentity/get");
if (!content.IsSuccessStatusCode)
{
return new JsonResult(tokenResponse.Error);
}
else
{
return new JsonResult(content.Content);
}
}
第一个问题: 但是一旦我尝试获取令牌并遵循上述代码的流程,使用邮递员,它会抛出 'Unauthorized' 错误。我不确定电话有什么问题。我只是从(邮递员的)授权选项中获得一个令牌,然后对端点进行 get 调用,这似乎很简单。
我的目标是,我的 MVCClient 上有一个页面 (AllowAnonymous),我计划使用 React。此页面不需要登录凭据,但会调用我的 Api (AllowAnonymous)。但我想确保 api 受到为 mvcclient 生成的令牌的保护。因此,该 api 不能被未在我的 IdentityServer 上注册的其他第三方应用程序使用。
我查看了 IdentityServer 团队提供的示例项目,这就是我所有代码的基础。我不确定我是否遗漏了他们的示例。我没有看到任何需要令牌才能在 mvcclient 端对公共页面(allowanonymous)进行 api 调用的示例。
已编辑以使其更清晰
【问题讨论】:
标签: c# identityserver3 identityserver4