• <legend id='KZSSH'><style id='KZSSH'><dir id='KZSSH'><q id='KZSSH'></q></dir></style></legend>
    <i id='KZSSH'><tr id='KZSSH'><dt id='KZSSH'><q id='KZSSH'><span id='KZSSH'><b id='KZSSH'><form id='KZSSH'><ins id='KZSSH'></ins><ul id='KZSSH'></ul><sub id='KZSSH'></sub></form><legend id='KZSSH'></legend><bdo id='KZSSH'><pre id='KZSSH'><center id='KZSSH'></center></pre></bdo></b><th id='KZSSH'></th></span></q></dt></tr></i><div id='KZSSH'><tfoot id='KZSSH'></tfoot><dl id='KZSSH'><fieldset id='KZSSH'></fieldset></dl></div>

    <small id='KZSSH'></small><noframes id='KZSSH'>

      <tfoot id='KZSSH'></tfoot>

      • <bdo id='KZSSH'></bdo><ul id='KZSSH'></ul>

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

        How do I use Windows Authentication with users in database(如何对数据库中的用户使用 Windows 身份验证)
      1. <tfoot id='yJsuF'></tfoot>
        • <small id='yJsuF'></small><noframes id='yJsuF'>

                <legend id='yJsuF'><style id='yJsuF'><dir id='yJsuF'><q id='yJsuF'></q></dir></style></legend>

                <i id='yJsuF'><tr id='yJsuF'><dt id='yJsuF'><q id='yJsuF'><span id='yJsuF'><b id='yJsuF'><form id='yJsuF'><ins id='yJsuF'></ins><ul id='yJsuF'></ul><sub id='yJsuF'></sub></form><legend id='yJsuF'></legend><bdo id='yJsuF'><pre id='yJsuF'><center id='yJsuF'></center></pre></bdo></b><th id='yJsuF'></th></span></q></dt></tr></i><div id='yJsuF'><tfoot id='yJsuF'></tfoot><dl id='yJsuF'><fieldset id='yJsuF'></fieldset></dl></div>
                  <bdo id='yJsuF'></bdo><ul id='yJsuF'></ul>
                    <tbody id='yJsuF'></tbody>

                  本文介绍了如何对数据库中的用户使用 Windows 身份验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

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

                  My main goal is using the Windows Authentication to query my custom Users table to use through the web application. I am not sure there is a conventional way of doing this.

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

                  I have a predefined Users table and Roles table in a SQL database. How do I use the User.Identity.Name to query this Users table and map all the tables data along with the roles to a ApplicationUser class that can be further used later in the intranet web application?

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

                  I was unable to find anything closely related to what I am after from reading tons of articles. I assume this will be done in the Startup class under ConfigureServices but am also unsure of that. I need the user to be looked up whenever they navigate to the site for the first time.

                  推荐答案

                  我会使用 ClaimsTransformer 来获取用户声明.我将尝试展示如何获取用户声明并处理 Windows Authenticatin 的授权.

                  I would go with ClaimsTransformer to get user claims. I just will try to show how to get user claims and to handle authorization for Windows Authenticatin.

                  首先创建一个ClaimsTransformer类:

                  public class ClaimsTransformer : IClaimsTransformer
                  {
                      // i assume you have a user service in which you get user info via entity framework
                      private readonly IUserService _userService;   
                      public ClaimsTransformer(IUserService userService)
                      {
                           _userService = userService;
                      }
                      public async Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
                      {
                          var identity = ((ClaimsIdentity)context.Principal.Identity);
                          // ... add user claims if required
                          var roles = _userService.GetRoles(identity.Name);
                          foreach(var role in roles)
                          {
                              identity.AddClaim(new Claim(ClaimTypes.Role, role));
                          }
                          return await Task.FromResult(context.Principal);
                      }
                  }
                  

                  然后在Configure方法中使用

                      public void Configure(IApplicationBuilder app)
                      {
                          //...
                          app.UseClaimsTransformation(async (context) =>
                          {
                              IClaimsTransformer transformer = context.Context.RequestServices.GetRequiredService<IClaimsTransformer>();
                              return await transformer.TransformAsync(context);
                          });
                          //...
                      }
                  

                  不幸的是,User.IsInRole 方法不适用于 ClaimsTransformer(如果您使用 ClaimsTransformer 添加角色,IsInRole 将为 false)所以您不能将 [Authorize(Roles = "")]ClaimsTransformer 一起使用.在这种情况下,您可以使用 基于声明的授权 来处理授权.

                  Unfortunately User.IsInRole method doesn't work with ClaimsTransformer(if you add role with ClaimsTransformer, IsInRole will be false) so you can't use [Authorize(Roles = "")] with ClaimsTransformer. In this case you can use Claims Based Authorization to handle authotorization.

                  所以最后将以下代码添加到 ConfigureServices 并使用 Authorize 属性:

                  So finally add below code to ConfigureServices and use Authorize attribute:

                      public void ConfigureServices(IServiceCollection services)
                      {
                          // Add framework services.
                          services.AddSingleton<IClaimsTransformer, ClaimsTransformer>();
                          services.AddAuthorization(options =>
                          {
                              options.AddPolicy("RequireAdministratorRole", policy => policy.RequireClaim(ClaimTypes.Role, "Administrator"));
                          });
                          //...
                      }
                  
                      [Authorize(Policy = "RequireAdministratorRole")]
                      public IActionResult Index() { }
                  

                  这篇关于如何对数据库中的用户使用 Windows 身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Performance overhead of using attributes in .NET(在 .NET 中使用属性的性能开销)
                  Accessing attribute info from DTE(从 DTE 访问属性信息)
                  c# Hide a property in datagridview with datasource(c#使用数据源隐藏datagridview中的属性)
                  Extract Display name and description Attribute from within a HTML helper(从 HTML 帮助器中提取显示名称和描述属性)
                  C# Attributes and their uses(C# 属性及其用途)
                  C# - Getting all enums value by attribute(C# - 按属性获取所有枚举值)
                • <i id='MfELX'><tr id='MfELX'><dt id='MfELX'><q id='MfELX'><span id='MfELX'><b id='MfELX'><form id='MfELX'><ins id='MfELX'></ins><ul id='MfELX'></ul><sub id='MfELX'></sub></form><legend id='MfELX'></legend><bdo id='MfELX'><pre id='MfELX'><center id='MfELX'></center></pre></bdo></b><th id='MfELX'></th></span></q></dt></tr></i><div id='MfELX'><tfoot id='MfELX'></tfoot><dl id='MfELX'><fieldset id='MfELX'></fieldset></dl></div>

                  • <small id='MfELX'></small><noframes id='MfELX'>

                        <tbody id='MfELX'></tbody>
                      <tfoot id='MfELX'></tfoot>

                          • <bdo id='MfELX'></bdo><ul id='MfELX'></ul>

                          • <legend id='MfELX'><style id='MfELX'><dir id='MfELX'><q id='MfELX'></q></dir></style></legend>