如何设置使用我的webapi的IdentityServer AllowAnonymous操作? (带有MVCClient和IdentityServer4的WebApi)

时间:2017-10-26 16:17:11

标签: c# identityserver3 identityserver4

我有一个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调用的示例。

编辑以使其更清晰

1 个答案:

答案 0 :(得分:0)

AllowAnonymous取消授权属性并允许匿名访问您的操作的属性。但在您的情况下,您希望您的api调用受到令牌

的保护
  

此页面将调用我的Api ..但我想确保它受到为mvcclient生成的令牌的保护。

我猜您需要确保用户在拨打此电话之前已登录。