gpt4 book ai didi

.net-core - 如何向Windows用户添加声明

转载 作者:行者123 更新时间:2023-12-04 18:01:13 31 4
gpt4 key购买 nike

我有一个启用Windows应用程序的dotnet核心api应用程序。我们有一堆具有特殊权限“admin”并存储在数据库中的用户,其余所有用户都具有默认权限“user”。我希望用户对数据库中的所有人有额外的要求。我也想存储更多信息,例如emailid,员工编号(我必须手动从LDAP查询)

我以为我将拥有一个api,即api/auth,它将捕获当前用户并根据数据库和ldap查询添加声明,其他api端点都可以使用它。

但是我无法获得如何在不同的api端点之间添加和保留声明。

有可能吗,或者这是个好方法?
我还有第二个选择,可以在每个api调用中访问数据库。

编辑1:
我编写了一个中间件,该中间件可拦截所有api请求并搜索LDAP/数据库,创建一个ClaimsIndentity并将其添加到Users.Identity。然后在整个通话中都可以使用它。

编辑2:
当我是@Ondra Starenko的答案时,我无法引用IClaimsTransformerapp.UseClaimsTransformation。还有什么我需要包括的。

平台:.NET Core 2.1.3

最佳答案

在.NET Core 2+中,不建议使用IClaimsTransformer。而是使用IClaimsTransformation:

using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;

public class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var ci = (ClaimsIdentity) principal.Identity;
var c = new Claim(ci.RoleClaimType, "Admin");
ci.AddClaim(c);
return Task.FromResult(principal);
}
}

另请注意,您不应使用“ClaimTypes.Role”。您应该使用ci.RoleClaimType-特别是如果您启用了Windows身份验证。在Windows身份验证下,ci.RoleClaimType评估为某个字符串值,该字符串值将作为角色正确获取,而ClaimTypes.Role则不会。

最后,将您的ClaimsTransformer添加到Startup.cs的ConfigureServices方法中:
services.AddSingleton<IClaimsTransformation, ClaimsTransformer>();

现在,您应该能够将基于角色的授权属性添加到Controller方法中,并且这些属性现在将被正确评估:
[Authorize(Roles = "Admin")]
[HttpGet("[action]/{id}")]
public User GetUser([FromRoute] int id)
{
UserLogic ul = new UserLogic();
return ul.GetUser(id);
}

关于.net-core - 如何向Windows用户添加声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823428/

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