gpt4 book ai didi

asp.net-core - 在身份服务器 4 中成功验证后如何在应用程序级别授权用户

转载 作者:行者123 更新时间:2023-12-04 17:34:25 25 4
gpt4 key购买 nike

我有两个单独的 SPA Web 应用程序,一个用于 AR 发票,另一个用于 AP 发票。每个应用程序都有自己的数据库,其中包含允许使用该应用程序的用户列表。每个应用程序都有其用于与其数据库交互的 ASPNET 核心 Web API。两个应用程序都使用相同的身份服务器来验证用户并授予使用应用程序 API 资源的授权。我的问题是找到在两个应用程序上实现用户权限的最佳方法。我应该只允许在 IDP 中成功通过身份验证的用户访问 AR 发票应用程序,前提是它们存在于该应用程序的用户表中,AP 发票应用程序也是如此。我知道我可以在身份服务器上向属于 AR 发票应用程序的不同用户和属于 AP 发票的用户添加声明,但我认为这不是最好的实现,因为添加此类信息不是用户身份。我正在考虑覆盖授权属性或添加一个策略来检查用户是否经过身份验证并存在于请求的应用程序中,但这种方法将要求应用程序为每个 API 调用检查应用程序的用户表。您能否建议或将我重定向到处理此类需求的任何教程。

最佳答案

如果您有一个 Identity Server 实例,您可以轻松地将 ASP.NET Identity 集成到其中。然后,在您的 API(资源)中,您根本不需要用户表 - 在针对身份服务器授权后, Controller 将自动拥有一个可用的 User 实例。此 User 是一个 ClaimsPrinciple,本质上是您可以检查的声明集合。

编辑:提供有关答案的更多详细信息。

您提到“每个应用程序都有自己的数据库,其中包含允许使用该应用程序的用户列表”。我的观点是,您可以让这两个应用程序的整个用户集仅驻留在 Identity Server 的数据库中。这将强制分离关注点——AR/AP 应用程序将只关注 AR/AP 任务,而 Identity Server 将关注用户和身份验证/授权。 AR/AP 应用程序真的不需要知道任何用户详细信息 - 他们应该只添加 Authorize 属性并假设,如果用户能够输入给定的端点,则该用户已经正确授权。

现在,您需要适本地构建每个应用的授权方式。这可以使用声明、角色甚至 policies 来完成。 (一种结合两者并添加更高级授权逻辑的方法)。例如,您可以在配置服务时将此添加到 AP 应用程序:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthorization(options =>
{
options.AddPolicy("CanCreateInvoice", policy =>
{
policy.RequireClaim("CreateInvoice");
policy.RequireRole("Admin");
policy.RequireUserName("user1");

});

});
}

然后您可以将其添加到 AP 应用端点:

public class InvoiceController : Controller
{
[Authorize(Policy = "CanCreateInvoice")]
public IActionResult CreateInvoice()
{
// Assume the user meets your policy requirements
// Create the invoice
};
}

这样,AP 应用程序就无需关心任何用户详细信息 - 它只执行与 AP 相关的任务。如果您需要将用户 ID 添加到创建的发票中,您可以这样做:

invoice.CreatedBy = User.FindFirst("sub").Value;

关于asp.net-core - 在身份服务器 4 中成功验证后如何在应用程序级别授权用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com