2016-08-18 5 views
3

私の主な目標は、Windows認証を使用してカスタムWebユーザーテーブルを照会し、Webアプリケーションから使用することです。私はこれを行う従来の方法があるとは確信していません。データベース内のユーザーにWindows認証を使用する方法

SQLデータベースに定義済みのUsersテーブルとRolesテーブルがあります。 User.Identity.Nameを使用してこのUsersテーブルにクエリを行い、ロールとともにすべてのテーブルデータをApplicationUserクラスにマップします。このクラスは後でイントラネットWebアプリケーションで使用できますか?

私は多くの記事を読むことから、私が何をしているかと密接に関連するものを見つけることができませんでした。私はこれがConfigureServicesの下のStartupクラスで行われると仮定していますが、そのことも確信しています。初めてサイトを訪れるたびにユーザーを検索する必要があります。

答えて

2

私はClaimsTransformerと一緒にユーザークレームを取得します。私は、ユーザーのクレームを取得し、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); 
    } 
} 

そして、残念ながらUser.IsInRole方法は、あなたがClaimsTransformerと役割を追加した場合(、IsInRoleはなりClaimsTransformerでは動作しませんConfigure方法で

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

をそれを使用しますfalse)ので[Authorize(Roles = "")]ClaimsTransformerを使用することはできません。この場合、Claims Based Authorizationを使用して自動処理を処理できます。

だから、最終的にはConfigureServicesにコードの下に追加して、Authorize属性を使用します。私は、これは私が後だった正確に何であると考えてい

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() { } 
+0

を。私は実装した後、私は正しいとマークし、私は他の質問がないことを確認します。 – HuntK24

関連する問題