【发布时间】:2020-03-27 10:56:21
【问题描述】:
我正在尝试在我的 Blazor Server 应用程序中提供自定义角色。使用 Windows 身份验证进行身份验证的用户应根据其 Active Directory 组获得这些自定义角色之一,一个组代表一个角色。
如果用户在正确的组中,则用户将获得 RoleClaimType 类型的声明。这些声明稍后用于授权某些页面和操作。
我还没有看到有人这么多谈论使用 Blazor Server 的 Windows 身份验证和 Active Directory,因此我有这些问题。这是我的尝试,但它是来自这里和那里的部分的混合。所以我不确定这是否是最好的方法还是不安全。
这就是我到目前为止所想出的......
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
string adGroup = _configuration.GetSection("Roles")
.GetSection("CustomRole")
.GetSection("AdGroup").Value;
if (principal.IsInRole(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();
...
}
我还在 Startup.cs 中注册了 ClaimsTransformer:
services.AddScoped<IClaimsTransformation, ClaimsTransformer>();
授权整个 Blazor 组件:
@attribute [Authorize(Roles = "CustomRole")]
或授权组件的某些部分:
<AuthorizeView Roles="CustomRole">
<Authorized>You are authorized</Authorized>
</AuthorizeView>
所以我的问题基本上是:
- 是否必须重新应用这些声明?如果它们到期,它们什么时候到期 过期了吗?
- 此类授权的最佳做法是什么?
- 这种方式安全吗?
【问题讨论】:
标签: c# asp.net-core authorization blazor windows-authentication