相关疑难解决方法(0)

如何对数据库中的用户使用 Windows 身份验证

我的主要目标是使用 Windows 身份验证来查询我的自定义用户表以通过 Web 应用程序使用。我不确定是否有传统的方法来做到这一点。

我在 SQL 数据库中有一个预定义的用户表和角色表。如何使用User.Identity.Name查询此用户表并将所有表数据以及角色映射到ApplicationUser稍后可以在 Intranet Web 应用程序中进一步使用的类?

通过阅读大量文章,我无法找到与我所追求的内容密切相关的任何内容。我认为这将在Startup课堂上完成,ConfigureServices但我也不确定。我需要在用户第一次导航到该站点时对其进行查找。

c# asp.net-core-mvc asp.net-core

7
推荐指数
1
解决办法
2261
查看次数

在.net core 2.0中缓存声明

到处都抬头,但看起来我现在被困住了。我在应用程序中使用Windows Active Directory进行身份验证。为了获得授权,我使用索赔。在搜索了有限的.net核心文档之后,这就是我的代码的样子。

启动文件

public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IPrincipal>(
            provider => provider.GetService<IHttpContextAccessor>().HttpContext.User);
        services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
        services.AddAuthentication(IISDefaults.AuthenticationScheme);

    }
Run Code Online (Sandbox Code Playgroud)

ClaimsTransformer.cs

class ClaimsTransformer : IClaimsTransformation
{
   public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
   {

// call to database to get more claims based on user id ClaimsIdentity.Name
     ((ClaimsIdentity)principal.Identity).AddClaim(new Claim("now",DateTime.Now.ToString()));
     return Task.FromResult(principal);
   }
}
Run Code Online (Sandbox Code Playgroud)

但是问题是,每次请求都会调用此代码,并且每次都会从db加载声明,这是绝对错误的。有什么办法可以缓存它?我能够创建声明的cookie并将该cookie用于.net 4.0中的任何其他调用。我似乎找不到核心的方法。我检查的所有文档都不完整,或者不涵盖我的情况。我可以在应用程序中进一步声明文档在这里的说法:https : //docs.microsoft.com/zh-cn/aspnet/core/security/authorization/claims

但是没有提到有关缓存索赔的内容。

有人在同一条船上吗?还是知道出路?

.net c# asp.net claims-based-identity asp.net-core

4
推荐指数
1
解决办法
3735
查看次数

使用.Net Core中的Windows Authenticated app从SQL填充自定义声明

场景 - 使用SQL Server管理应用程序特定权限和扩展用户身份的Active Directory中的.Net Core Intranet应用程序.

迄今为止的成功 - 用户已通过身份验证,并且可以使用Windows声明(名称和组).Identity.Name可用于从具有扩展属性的数据库返回域用户模型.

问题和问题 - 我试图填充一个自定义声明属性"Id",并通过ClaimsPrincipal全局提供.到目前为止,我已经查看了ClaimsTransformation,但没有取得多大成功.在其他文章中,我已经读过你必须在登录之前添加声明,但这真的可以吗?这意味着完全依赖AD满足所有索赔,情况确实如此吗?

下面是我在HomeController中的简单代码.我正在访问数据库,然后尝试填充ClaimsPrincipal,然后返回域用户模型.我认为这可能是我的问题所在,但我是.net的授权新手,并努力让我的头脑索赔.

非常感谢所有的帮助

现行代码:

public IActionResult Index()
        {
            var user = GetExtendedUserDetails();
            User.Claims.ToList();
            return View(user);
        }

        private Models.User GetExtendedUserDetails()
        {
            var user = _context.User.SingleOrDefault(m => m.Username == User.Identity.Name.Remove(0, 6));
            var claims = new List<Claim>();

            claims.Add(new Claim("Id", Convert.ToString(user.Id), ClaimValueTypes.String));
            var userIdentity = new ClaimsIdentity("Intranet");
            userIdentity.AddClaims(claims);
            var userPrincipal = new ClaimsPrincipal(userIdentity);

            return user;
        }
Run Code Online (Sandbox Code Playgroud)

更新:

我已经注册了ClaimsTransformation

app.UseClaimsTransformation(o => new ClaimsTransformer().TransformAsync(o));
Run Code Online (Sandbox Code Playgroud)

并根据此github查询构建如下所示的ClaimsTransformer

https://github.com/aspnet/Security/issues/863

public class ClaimsTransformer : IClaimsTransformer
{
    private readonly …
Run Code Online (Sandbox Code Playgroud)

authorization claims-based-identity asp.net-core

1
推荐指数
1
解决办法
1370
查看次数