JS报表服务器控制台错误:授权服务器的响应中没有“用户名”字段,令牌被视为无效

时间:2018-09-01 10:12:18

标签: identityserver4 jsreport

我的带有客户端ui应用程序的js报表服务器正在通过添加一个声明(例如, IdentityServer中的Claim('username','user name value')。 4版本1.1。但最近,客户端已将Identityserver 4版本升级到2.2.0和netcoreapp2.1。

现在,客户端ui应用程序会出现“未经授权”错误。当我在本地运行应用程序时,我在jsreport服务器控制台中看到一个错误:  错误:授权服务器的响应中没有“用户名”字段,令牌被视为无效。

我试图在示例中找到解决方案: https://github.com/bjrmatos/jsreport-with-authorization-server-sample,但他们尚未升级最新的.net核心和身份服务器的样本,我发现节点js样本链接“ https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/NodeJsApi”不存在。所以我无法解决问题。有人可以帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,可以通过添加带有用户名的声明类型并在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报表服务器中。