我困惑的使用项目,该项目授权类型的:要求或基于策略的授权。这是依赖于项目的安全设计?或者他们是一样的吗?根据微软的文档,我们可以配置和使用的权利要求如下:
private async Task CreateUserAndClaim(IServiceProvider serviceProvider)
{
var claimList = (await UserManager.GetClaimsAsync(user)).Select(p => p.Type);
if (!claimList.Contains("DateOfJoing")){
await UserManager.AddClaimAsync(user, new Claim("DateOfJoing", "09/25/1984"));
}
}
然后使用此权利要求如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("IsAdminClaimAccess", policy => policy.RequireClaim("DateOfJoing"));
}
[Authorize(Policy = "IsAdminClaimAccess")]
public IActionResult TestMethod1(){}
和配置和使用的政策如下:
public class MinimumTimeSpendRequirement: IAuthorizationRequirement
{
public MinimumTimeSpendRequirement(int noOfDays)
{
TimeSpendInDays = noOfDays;
}
protected int TimeSpendInDays { get; private set; }
}
public class MinimumTimeSpendHandler : AuthorizationHandler<MinimumTimeSpendRequirement>
{
...
var dateOfJoining = Convert.ToDateTime(context.User.FindFirst(
c => c.Type == "DateOfJoining").Value);
}
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
...
...
options.AddPolicy("IsAdminPolicyAccess", policy => policy.Requirements.Add(new MinimumTimeSpendRequirement(365)));
}
}
然后使用此策略一样在我的控制器要求的。正如你看到的,无论是做一个thing.controll用户加入date.which更好?是注意力更好的速度和安全性?或者它看起来都是一样的吗?
索赔是定义用户的东西,这是一个关键 - 值对。
年龄:30 |性别:男|名称:鲍勃·马利|电子邮件:[email protected]
你得到的图片。然后,您可以实现基于要求和价值的授权检查。
进一步
您可以定义一个政策,政策是需要以获得访问遵守的东西。它可以由多个如权利要求检查。
所以,你可以做一个策略:当值超过18,其中性别是男年龄:IsMaleAndOver18,需要用户有2个说法。
当实现他们看起来在代码中,但在现实相似,它们有很大的不同。