Я использую Identity Server для защиты моего API.
Я определил ApiResource как это:
return new List<ApiResource>
{
new ApiResource
{
Name = "phone.api",
ApiSecrets={new Secret("secret1".Sha256())},
Scopes =
{
new Scope()
{
Name = "phone.api.full_access",
DisplayName = "Full access to API"
},
new Scope
{
Name = "phone.api.write",
DisplayName = "Write and read access to API"
},
new Scope
{
Name = "phone.api.read",
DisplayName = "Read only access to API"
}
}
,UserClaims=new List<string>()
{
"roles",
// ClaimTypes.DateOfBirth
}
},
И такой тестовый пользователь:
new TestUser
{
SubjectId = "1",
Username = "Billy Admin",
Password = "password",
Claims = new List<Claim>()
{
new Claim("roles", "phone.api.admin"),
new Claim(ClaimTypes.DateOfBirth,new DateTime(1900,10,10).ToString())
}
}
API защищен следующим кодом:
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = Config.AUTHAUTHORITY; //"http://localhost:4000";
options.ApiName = "phone.api";
options.ApiSecret = "secret1";
options.RequireHttpsMetadata = false;
});
У меня есть вопрос, если, когда client + access_token (не содержащий утверждение ClaimTypes.DateOfBirth), API автоматически вызовет конечную точку информации пользователя на сервере полномочий для получения дополнительных требований.
Причина, по которой мне нужны дополнительные претензии, заключается в том, что они проверяют некоторые правила, такие как:
services.AddAuthorization(options =>
{
options.AddPolicy("Only21", policy => policy.Requirements.Add(new MinimumAgeRequirement(21)));
} );
Мои тесты показывают, что он не вызывает конечную точку userinfo, и я хочу знать, почему. Должен ли я назвать это по-своему AuthorizationHandler<MinimumAgeRequirement>
?
Большое спасибо.