我的带有客户端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”不存在。所以我无法解决问题。有人可以帮我吗?
谢谢。
答案 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报表服务器中。