Wil*_*ill 15 asp.net-identity asp.net-core-mvc asp.net-core
我正在创建一个企业内部网ASP.NET核心MVC应用程序.我希望我的用户使用Active Directory进行身份验证,我希望存储在ApplicationDbContext中的用户授权(声明).
我假设我需要使用Microsoft.AspNetCore.Identity和Microsoft.AspNetCore.Identity.EntityFrameworkCore来实现我的目标.在针对Active Directory进行身份验证时,存储ASP.NET Core Authorization声明的最佳做法是什么?
以下代码将允许我从管道内访问当前Windows用户安全上下文(当前登录用户).不知何故,我需要将用户映射到相关的Microsoft.AspNetCore.Identity声明?
app.Use(async (context, next) =>
{
var identity = (ClaimsIdentity) context.User.Identity;
await next.Invoke();
});
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
我认为这方面没有最佳实践,但您确实有很多选择。也许您可以详细说明一下您想要实现的目标?这里有一些提示可以帮助您解决一些问题。只是一个问题...您在后台使用什么来针对 AD 进行身份验证?如果您使用IdentityServer或类似的东西,那么我建议倾向于选项 4。
ApplicationUser属性首先,声明只是键值对。这意味着您可以创建一个结构,例如:
public class UserClaim
{
public string UserName {get; set;}
public string Key {get; set;}
public string Value {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这将允许您将声明存储在您的ApplicationUser类中。
UserManagerUserManager<ApplicationUser> userManager更好的是,您可以通过将 a 注入到您希望添加用户声明的类中,然后AddClaim()使用适当的值进行调用,从而利用内置的身份组件。由于 Core 中的 DI 系统,您可以在任何将由运行时激活的类中自由地执行此操作。
另一种方法是使用属性UserClaim来扩充类UserName,然后使用原则的唯一标识符 ( User.Identity.Name)。然后您可以将其存储在DbSet<UserClaim>您的中ApplicationDbContext并按用户名获取声明。
如果您只需要访问声明,而不是存储它们(我不确定您的问题的意图),那么User如果您在控制器中,那么您最好只访问该属性,前提是您使用的是正确地结合声明的身份验证服务。
它User用属于登录到您的应用程序的用户的声明进行装饰,并且在每个控制器上都可用。
您可以通过其他方式获取ClaimsPrinciple并访问用户的声明。在这种情况下(在控制器之外),您要做的就是IHttpContextAccessor accessor向类的构造函数添加 an 并导航到该HttpContextAccessor.HttpContext.User属性,该属性又是一个ClaimsPrinciple.
| 归档时间: |
|
| 查看次数: |
5932 次 |
| 最近记录: |