【发布时间】:2021-04-09 22:25:14
【问题描述】:
我有一个带有多个端点的 .net 核心 API。我正在使用 Identity Server 4 进行身份验证。令牌将根据正确的用户名和密码生成。
在同一个 API 中,我想添加另一个端点,该端点只能通过 API 调用访问,普通用户不应该能够访问端点。
我正在考虑对端点进行基于策略的授权。
这是一个正确的方法吗?
【问题讨论】:
标签: asp.net asp.net-core
我有一个带有多个端点的 .net 核心 API。我正在使用 Identity Server 4 进行身份验证。令牌将根据正确的用户名和密码生成。
在同一个 API 中,我想添加另一个端点,该端点只能通过 API 调用访问,普通用户不应该能够访问端点。
我正在考虑对端点进行基于策略的授权。
这是一个正确的方法吗?
【问题讨论】:
标签: asp.net asp.net-core
你可以做几件事。
gty 声明是否等于client_credentials,如果不是;返回 HTTP 403 响应。【讨论】:
是的,您需要配置您的政策。为此,您需要了解身份验证和授权之间的区别,并同时设置它们。例如在我们的项目中,我们使用了几种不同的身份验证源,然后将它们映射到授权策略
services.AddAuthentication()
.AddScheme<...>("scheme1", ...)
.AddScheme<...>("scheme2", ...)
...;
services.AddAuthorization(opts =>
{
opts.AddPolicy("policy1", policy => policy.AddAuthenticationSchemes("scheme1")
.<some other requirements specific to this policy>
.RequireAuthenticatedUser());
opts.AddPolicy("policy2", policy => policy.AddAuthenticationSchemes("scheme2")
.<some other requirements specific to this policy>
.RequireAuthenticatedUser());
}
之后您可以使用[Authorize("policy1")] 和[Authorize("policy2")]。或者您可以通过添加将一项策略设为默认策略
opts.DefaultPolicy = new Microsoft.AspNetCore.Authorization
.AuthorizationPolicyBuilder()
.<requirements go here>
然后使用[Authorize] 使用默认策略,[Authorize("policy1")] 用于特殊情况。
【讨论】: