В рамках проекта миграции я пытаюсь заменить устаревший пользовательский API аутентификации на основе jwt, использующий .Net Core / ApiServer.В идеале токены jwt, созданные с помощью нашего нового решения, должны быть близки к токенам, созданным в наследии;в том числе использование областей применения.например, legacy:
{
"iss": "http://example.com",
"sub": "api@example",
"unique_name": "test@api",
"given_name": "api user",
"scope": [
"GET api/balance/{date}",
"GET api/whoami",
...
],
"role": "12,0,11",
"client-scope": "test_client",
"user-scope": [
"Support",...
],
"aud": "test_client",
"exp": 1543376516,
"nbf": 1543376216
}
наше новое решение почти работает - за исключением областей (глаголы API и конечные точки).Метод, который я использую для их установки:
Первое добавление поддержки в файле startup.cs:
IdentityServerBuilderExtensionsCrypto
.AddSigningCredential(services.AddIdentityServer(options =>
{
options.IssuerUri = Configuration["Jwt:Issuer"];
}), signingKey)
.AddInMemoryApiResources(InMemoryConfiguration.ApiResources().Result)
.AddInMemoryClients(InMemoryConfiguration.Clients().Result);
Установка массива ApiRepources в виде списка URLконечные точки
var resources = new List<ApiResource> {
new ApiResource("api/balance/{date}"), new ApiResource("api/whoami"), ...
};
Установка их в качестве области для клиента
AllowedScopes = ["api/balance/{date}", "api/whoami", ...etc]
При отправке запроса я получаю ошибки invalid_scope, о которых сообщается вlog:
2018-12-02 08: 37: 24.8874 IdentityServer4.Validation.ScopeValidator Запрашиваемая область не разрешена: api / holdings / {date}
Кажется,GET глагол усечен для проверки?Мне удалось получить базовый пример работы с удаленным префиксом GET (или другого глагола), но, к сожалению, нам, вероятно, все еще понадобится это для поддержки существующих приложений.
Кто-нибудь может помочь сообщить, какмы можем заставить это работать?