Использование Active Directory и аутентификации Windows для предоставления пользовательских ролей в Blazor Server - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь назначить пользовательские роли в моем приложении Blazor Server. Пользователь, прошедший проверку подлинности с Windows Проверка подлинности, должна получить одну из этих пользовательских ролей в зависимости от их групп Active Directory, одна группа представляет одну роль.

Если пользователь находится в правильной группе, то пользователь будет дано утверждение типа RoleClaimType. Эти претензии позже используются для авторизации определенных страниц и действий.

Итак, мои вопросы в основном:

- Должны ли эти претензии быть повторно применены? Если они истекают, когда они истекают?

- Какова наилучшая практика для такого типа авторизации?

Я не видел, чтобы кто-то говорил так многое о Windows Аутентификации и Active Directory с использованием Blazor Server, поэтому у меня возникли следующие вопросы. Это моя попытка, но это смесь частей здесь и там. Так что я не уверен, является ли это лучшим способом сделать это или это небезопасно.

Это то, что я до сих пор придумал ..

ClaimTransformer.cs, я получил группу объявлений из appsettings. json.

public class ClaimsTransformer : IClaimsTransformation
{
    private readonly IConfiguration _configuration;

    public ClaimsTransformer(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        var claimsIdentity = (ClaimsIdentity)principal.Identity;
       // AppRole has two string props, Displayname and AdGroup.
        AppRole customRole = new AppRole() 
        {  
            DisplayName =_configuration.GetSection("Roles")
                    .GetSection("CustomRole")
                    .GetSection("DisplayName").Value,
            AdGroup = _configuration.GetSection("Roles")
                    .GetSection("CustomRole")
                    .GetSection("AdGroup").Value
        };
        if (principal.IsInRole(customRole.AdGroup))
        {
            Claim customRoleClaim = new Claim(claimsIdentity.RoleClaimType, "CustomRole");
            claimsIdentity.AddClaim(customRoleClaim);
        }

        return Task.FromResult(principal);
    }
}

Чтобы заставить Claimstransformer работать с атрибутом Authorize, используйте это в Startup.cs:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   ...

   app.UseAuthorization();
   app.UseAuthentication();

   ...
}

Я также зарегистрировался ClaimsTransformer в Startup.cs с: services.AddScoped<IClaimsTransformation, ClaimsTransformer>();

Чтобы авторизовать весь компонент Blazor:

    @attribute [Authorize(Roles = "CustomRole")]

или авторизовать части компонента:

    <AuthorizeView Roles="CustomRole">
        <Authorized>You are authorized</Authorized>
    </AuthorizeView>
...