Я пытаюсь назначить пользовательские роли в моем приложении 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>