Ошибка консоли сервера отчетов JS: на сервере авторизации в ответе отсутствует поле "имя пользователя", токен считается недействительным
Мой сервер отчетов js с клиентскими приложениями пользовательского интерфейса работал с именем пользователя, поданным путем добавления одной заявки, например, претензии ('username', 'user name value') в identityserver. 4 версия 1.1. Недавно клиент обновил версию identityserver 4 до 2.2.0 и netcoreapp2.1 .
Теперь клиентские приложения получают ошибку "Несанкционированный". Когда я запускаю приложение локально, я вижу одну ошибку в консоли сервера jsreport: ошибка: сервер авторизации не имеет поля "username" в своем ответе, токен считается недействительным.
Я попытался найти решение в примере: https://github.com/bjrmatos/jsreport-with-authorization-server-sample но они еще не обновили образец для последней версии ядра.net и сервера идентификации. Я вижу узел Пример ссылки js " https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/NodeJsApi" не существует. поэтому я не могу решить проблему. Может кто-нибудь помочь мне, пожалуйста, по этому поводу?
Заранее спасибо.
1 ответ
Я нашел решение, чтобы решить эту ошибку, добавив тип заявки с именем пользователя и объявив это в области ресурсов API:
new ApiResource
{
Name="jsreportscope",
DisplayName = "JavaScript based reporting platform",
Scopes=
{
new Scope()
{
Name="jsreportscope",
UserClaims = new List<string>(){"username" }
}
},
UserClaims = new List<string>(){"username"},
ApiSecrets = { new Secret("yoursecret".Sha256()) },
}
Но теперь это касается предыдущей проблемы, которую я исправил, добавив тип заявки, соответствующий значению поля имени пользователя, с версией сервера идентификации 1.1, но теперь мы обновили версию сервера идентификации до 2.1 и снова получили ошибку. Он смог авторизовать любого пользователя сервера идентификации для доступа к отчету. Вот код jsreport.config.js, который я использую:
{
"store": { "provider": "fs" },
"httpPort": 5004,
"allowLocalFilesAccess": true,
"extensions": {
"authentication": {
"cookieSession": {
"secret": "<your strong secret>"
},
"admin": {
"username": "IdentityServer4User@domain.com",
"password": "Password"
},
"authorizationServer": {
"tokenValidation": {
"endpoint": "http://localhost:5000/connect/introspect",
"usernameField": "username",
"activeField": "active",
"scope": {
"valid": ["jsreportscope"]
},
"auth": {
"type": "basic",
"basic": {
"clientId": "jsreport",
"clientSecret": "yoursecret"
}
}
}
},
"enabled": true
},
"authorization": {
"enabled": true
},
"sample-template": {
"createSamples": true
}
}
}
Но теперь я могу войти в систему и получить доступ к отчетам с сервера отчетов, если при входе в систему только пользователем IdentityServer4User@domain.com любые другие пользователи получают несанкционированную ошибку. В консоли сервера отчетов ошибка отображается так:
ошибка: имя пользователя "OtherIdentityServer4User@domain.com", возвращенное с сервера авторизации, не является пользователем jsreport.Я не хочу добавлять всех пользователей сервера идентификации на сервер отчетов js.