IdentityServer4 .net 核心,是否可以使用从同一服务器生成的令牌保护同一 IdentityServer 上的控制器?

IdentityServer4 .net core, is it possible to protect controllers on the same IdentityServer with a token generated from the same server?

通常当我们使用 IdentityServer4 时,我们会使用这个设置:

我们会在哪里

假设我们有此设置,但我需要在授权服务器(身份服务器)上添加受保护的 Api,受保护的意思是使用授权属性。这可能吗?因为我没有在网上找到任何示例,我一直在尝试通过在 IdentityServer 上添加 JwtBearer 代码来实现它(JwtBearer 通常添加到您想要保护的 WebApi 项目上,并将 Authority 设置为您的IdentityServer 域)。

简而言之,我想要实现的是在同一个授权服务器上拥有受保护的资源。这可能吗?

提前致谢

您可以将 IdentityServer 和受保护的资源放在同一台机器上,但我不建议这样做。

我的经验是,很难知道谁在做什么,也很难完全理解和推理正在发生的事情。我总是建议将 IdentityServer、客户端和 API 放在独立的服务中。只是为了清楚地分离关注点。

可以通过一些额外的配置。有人反对这样做,但我有一些必要的用例。

对于本地 API 身份验证,您需要在启动中进行以下额外配置:

public void ConfigureServices(IServiceCollection services)
{
  ....
  // After services.AddIdentityServer()
  services.AddLocalApiAuthentication();
}

参考 docs

您还需要配置本地资源:

  public static IEnumerable<ApiResource> Apis =>
    new ApiResource[]
    {
      // your other resources....
      new ApiResource(IdentityServerConstants.LocalApi.ScopeName)
    };

对于客户端,您需要添加本地 API 范围:

  AllowedScopes =
  {
    // your other scopes....
    IdentityServerConstants.LocalApi.ScopeName
  }

然后您需要将本地 API 策略指定为 API 上 Authorize 属性的一部分:

[Authorize(LocalApi.PolicyName)]

看一个本地人APIexample.