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(受授权保护)
假设我们有此设置,但我需要在授权服务器(身份服务器)上添加受保护的 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.
通常当我们使用 IdentityServer4 时,我们会使用这个设置:
我们会在哪里
- 授权服务器(身份服务器)
- 一个客户端(将请求令牌)
- 一个网站Api(受授权保护)
假设我们有此设置,但我需要在授权服务器(身份服务器)上添加受保护的 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.