Ранее в .NET Framework я использовал настраиваемую RoleProvider
вместе с проверкой подлинности Windows для доставки настраиваемых ролей по отношению к текущему принципалу, а не по группам Active Directory.
Итак, цель состоит в том, чтобы иметь возможность использоватьдекоративный атрибут [Authorize(Roles="")]
, в котором роли берутся из базы данных, а не из активного каталога (или их комбинация подойдет).
Чтобы достичь этого в основном, я считаю, что мне нужно использовать IClaimsTransformation
для назначения заявок на роли, как обсуждено здесь .
Здесь я просто пытаюсь добавить одну роль "Администратор", однако, когда я использую [Authorize(Roles = "Admin")]
, я получаю 403 Несанкционированный ответ.
Startup.cs
services.AddRazorPages();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddSingleton<IClaimsTransformation, ClaimsTransformer>();
-------
app.UseAuthorization();
ClaimsTransformer.cs
public class ClaimsTransformer : IClaimsTransformation
{
public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var identity = (ClaimsIdentity)principal.Identity;
var c = new Claim(identity.RoleClaimType, "Admin");
identity.AddClaim(c);
return await Task.FromResult(principal);
}
}
К сожалению, это работает, когда я звоню User.IsInRole()
, и я вижу группу, когда проверяю заявкипоэтому он добавляется, однако не работает с атрибутом Authorize. Любой совет будет оценен.