我有一个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);
}
}
第一个问题: 但一旦我尝试获取令牌并按照上述代码流程使用postman ,就会抛出'Unauthorized'错误。我不确定这个电话有什么问题。我只是直接从授权选项(邮递员)获得一个令牌,然后对端点进行调用。
我的目标是,我的MVCClient上有一个页面(AllowAnonymous),我计划使用React。此页面不需要登录凭据,但会调用我的Api(AllowAnonymous)。但我想确保api受到为mvcclient生成的令牌的保护。因此api不能被我的IdentityServer上未注册的其他第三个应用程序使用。
我查看了IdentityServer团队提供的示例项目,这是我所有代码的基础。我不确定我的例子是否遗漏了什么。我没有看到任何需要令牌来在mvcclient端对公共页面(允许匿名)进行api调用的示例。
编辑以使其更清晰
答案 0 :(得分:0)
AllowAnonymous
取消授权属性并允许匿名访问您的操作的属性。但在您的情况下,您希望您的api调用受到令牌
此页面将调用我的Api ..但我想确保它受到为mvcclient生成的令牌的保护。
我猜您需要确保用户在拨打此电话之前已登录。