Это позволяет использовать KVP и несколько значений.
// with Razor, you did not specific if it was core 2, 3.1 or Razor
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.AddPolicy("Vendors", policy =>
policy.RequireClaim("Type.Tykt.org", "Dealer", "Driver", "WholeSaler", "Asset", "Repair"));
});
}
Опция 2:
Также существует коллекция claims
, которую можно добавить после успешного выполнения пользователем. входит в систему.
var user = new User {
Email = "xyz@tykt.org",
Name = "xyz"
}
user.Claims.Add(new IdentityUserClaim<string>
{
ClaimType="your-type", // your key
ClaimValue="your-value" // your value
});
await userManager.CreateAsync(user);
Обновление Ссылка MSDN :
Это действительно ваш выбор того, как вы сохраняете извлечение, если я понимаю вопрос, ваш В частности, вопрос заключается в значении претензии.
Как правило, сопоставление и проверка происходит в чем-то вроде PermissionHandler : IAuthorizationHandler
или обобщенного c подхода MinimumAgeHandler : AuthorizationHandler<MinimumAgeRequirement>
. Который загружает значения и обрабатывает проверку требований для определенного разрешения c, например, для минимального возраста, но для фактических утверждений (что вы заявляете / min age policy
против значение обычно находится в БД как DOB = 1/1/1990
) путешествовать с объектом Principal
. Теперь, когда вы решите получить значение претензии, вам решать
В приведенной ниже функции он получает значение для ключа из контекста и затем проверяет
public class MinimumAgeHandler : AuthorizationHandler<MinimumAgeRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
MinimumAgeRequirement requirement)
{
if (!context.User.HasClaim(c => c.Type == ClaimTypes.DateOfBirth &&
c.Issuer == "http://contoso.com"))
{
return Task.CompletedTask;
}
var dateOfBirth = Convert.ToDateTime(
// He gets the value on the server-side from any store or 3rd party relayer
context.User.FindFirst(c => c.Type == ClaimTypes.DateOfBirth &&
c.Issuer == "http://contoso.com").Value);
int calculatedAge = DateTime.Today.Year - dateOfBirth.Year;
if (dateOfBirth > DateTime.Today.AddYears(-calculatedAge))
{
calculatedAge--;
}
if (calculatedAge >= requirement.MinimumAge)
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}