Я разрабатываю систему авторизации на ASP.NET Core 2.1, которая требует как уровня ресурсов, так и соблюдения области действия перед предоставлением доступа.То есть я должен быть автором книги (их может быть несколько), и у меня должны быть необходимые области («write.book», «read.book», «delete.book» и т. Д.).Я успешно настроил JWT в Startup.cs
и получаю 401s
, когда передаются недопустимые токены.Проблема, с которой я сталкиваюсь, заключается в обеспечении соблюдения границ.policy.RequireClaim("scope", "write.book")
работает, когда токену доступа требуется только одна требуемая область, но всегда происходит сбой, токен доступа содержит несколько областей действия "write.book delete.book"
.Как настроить политику так, чтобы ей требовался список областей, которые могут быть подмножеством областей, содержащихся в маркере доступа?Я не вижу никаких Policy
методов, которые принимают список областей, поэтому я предполагаю, что фреймворк просто выполняет сравнение строк, поэтому авторизация не удалась.write.book != write.book delete.book
.Чтобы уточнить, если для политики требуется только одна область действия write.book
, но в токене доступа write.book delete.book
присутствует несколько элементов, авторизация завершится неудачей.
Приведенный ниже код работает, только если токен доступа содержит одну область действия, ине работает, если присутствует несколько.
authorization.AddPolicy("writeBookPolicy", policy => {
policy.RequireAuthenticatedUser().AddAuthenticationSchemes("Bearer")
.RequireClaim("scope", "write.book").Build();
});
{"scope": "write.book"} // Works
{"scope": "write.book delete.book"} //Fails