【问题标题】:Secure access only to controller in IdentityServer4仅安全访问 IdentityServer4 中的控制器
【发布时间】:2018-02-07 02:57:24
【问题描述】:

我按照教程 http://docs.identityserver.io/en/release/quickstarts/0_overview.html 创建了一个基本的 IdentityServer4。 由 APIserver、JSClient 和 ID4 Server 组成。

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

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

【问题讨论】:

  • 我会选择一个单独的 API,在这里查看我的答案:stackoverflow.com/questions/48645644/…
  • 你能澄清一下吗?我的 api 独立于 ID4 服务器
  • 不要让 Ids4 变得安静,而是拆分功能。留下 Ids4 进行身份验证。创建一个新的 API 并将基本控制器放在那里。将其视为另一种资源(在这种情况下可以访问 IdentityModel)。

标签: asp.net-core identityserver4


【解决方案1】:

您可以让 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("JsClient")]

【讨论】:

  • 有趣的是,我在发布问题的同时偶然发现了这一点。大约 80% 和我的一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多