Ошибка консоли сервера отчетов JS: на сервере авторизации в ответе отсутствует поле «имя пользователя», токен считается недействительным - PullRequest
0 голосов
/ 01 сентября 2018

Мой сервер отчетов js с клиентскими приложениями работал с именем пользователя, поданным путем добавления одной претензии, например, Утверждение («имя пользователя», «значение имени пользователя») на сервере идентификации. 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 Ответ

0 голосов
/ 09 сентября 2018

Я нашел решение для устранения этой ошибки, добавив тип заявки с именем пользователя и объявив это в области ресурсов 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. Любые другие пользователи получают несанкционированную ошибку. В консоли сервера отчетов ошибка отображается как:

error: username "OtherIdentityServer4User@domain.com" returned from authorization server is not a jsreport user.
Я не хочу добавлять всех пользователей сервера идентификации на сервер отчетов js.
...