Identity Server 4保护API

时间:2018-11-19 15:28:51

标签: c# api identityserver4

我正在尝试使用Identity Server 4保护我的API。现在,我已经浏览了http://docs.identityserver.io/en/release/quickstarts/1_client_credentials.html上的所有文档,并建立了一些成功的演示。但是,有一件事我无法理解。

例如,首先,我们需要在IS4上定义如下所示的客户端:

new Client
{
    ClientId = "client",

    // no interactive user, use the clientid/secret for authentication
    AllowedGrantTypes = GrantTypes.ClientCredentials,

    // secret for authentication
    ClientSecrets =
    {
        new Secret("secret".Sha256())
    },

    // scopes that client has access to
    AllowedScopes = { "api1" }
}

然后在API上,我们通过添加IdentityServer4.AccessTokenValidation包并将配置添加到startup.cs来对其进行保护

services.AddMvcCore()
    .AddAuthorization()
    .AddJsonFormatters();

services.AddAuthentication("Bearer")
    .AddIdentityServerAuthentication(options =>
    {
        options.Authority = "http://localhost:5000";
        options.RequireHttpsMetadata = false;

        options.ApiName = "api1";
    });

最后我们添加app.UseAuthentication();

现在,这一切在运行时都有效,但是,我不了解的部分是API中定义的秘密在哪里。如您所见,客户端显然希望有一个秘密,但我没有在API的任何地方定义此秘密。我也没有在IS4的任何地方定义有关我的API的任何内容,以表示您正在保护API免受此URI的侵害。

那么从IS4知道API并验证其请求的角度来看,这实际上是如何工作的?

编辑:

为澄清一些混乱,是的,我在上面的代码中选择了一个客户端,现在我不应该这样做,并且在其中提供了一个秘密,但是我仍然不了解IS4如何知道保护我的特定API。如果请求来自www.somerandomapi.com,该怎么办?从我正在阅读的内容来看,它无论如何都可以工作。根据您的写法,确实可以知道客户端正在传递密码,但是在我的代码中没有地方告诉IS4应该保护哪个API。

0 个答案:

没有答案