Asp.net core 仅安全访问IdentityServer4中的控制器

Asp.net core 仅安全访问IdentityServer4中的控制器,asp.net-core,identityserver4,Asp.net Core,Identityserver4,我根据教程创建了一个基本的IdentityServer4。 它由APIserver、JSClient和ID4服务器组成 总的来说,一切都很好,现在我尝试更进一步,我想在ID4Server中创建一个名为AuthorizedUserController的基本控制器,它是restful的,并且只能由授权用户从JSClient访问 我目前找不到任何关于如何实现这一点的示例,希望能得到一些指导。您可以让IdentityServer包含承载令牌身份验证: services.AddAuthentication

我根据教程创建了一个基本的IdentityServer4。 它由APIserver、JSClient和ID4服务器组成

总的来说,一切都很好,现在我尝试更进一步,我想在ID4Server中创建一个名为AuthorizedUserController的基本控制器,它是restful的,并且只能由授权用户从JSClient访问


我目前找不到任何关于如何实现这一点的示例,希望能得到一些指导。

您可以让IdentityServer包含承载令牌身份验证:

services.AddAuthentication()
    .AddIdentityServerAuthentication("bearer", options =>
    {
        options.Authority = "you identityserver base url";
        options.ApiName = "identityserver_api";
    });
然后使用授权策略检查方案和客户端ID声明:

services.AddAuthorization(options =>
{
    options.AddPolicy("JsClient", config =>
    {
        config.AddAuthenticationSchemes("bearer");
        config.RequireClaim("client_id", "my javascript client");
    });
});
然后向控制器添加一个authorize属性,该属性指定此授权策略:

[Authorize("JsClient")]

我想要一个单独的API,在这里检查我的答案:你能澄清吗?我的api是独立于ID4服务器的。不要使Ids4成为restful的,而是分离功能。将Ids4留给身份验证。创建一个新的API并将基本控制器放在那里。Treat是另一个资源(在本例中,它可以访问IdentityModel)。有趣的是,我在发布问题的同时偶然发现了这一点。大约80%和我的一样。