Cra*_*gle 4 openid node.js express keycloak keycloak-services
因此,我在使 Keycloak-Connect 示例正常工作时遇到一些问题。
基本上我在虚拟机上的快速路线上使用 Keycloak 进行了简单的检查
(10.10.10.54:8081)如下。
app.get('/api*', keycloak.protect(), (req, res) => res.status(200).send({
message: 'Hit API Backend!',
}));
Run Code Online (Sandbox Code Playgroud)
我的 Keycloak 服务器位于单独的虚拟机上(本例为http://keycloak.myexternaldomain.ca/auth/)
我一直在打电话来测试这个问题。
RESULT=`curl --data "grant_type=password&client_secret=mysecret&client_id=account&username=myusername&password=mypassword" http://keycloak.myexternaldomain.ca/auth/realms/TEST/protocol/openid-connect/token`
Run Code Online (Sandbox Code Playgroud)
这每次都会返回正确的访问令牌,
TOKEN=`echo $RESULT | sed 's/.*access_token":"//g' | sed 's/".*//g'`
Run Code Online (Sandbox Code Playgroud)
将 token 解析为变量。
curl http://10.10.10.54:8081/api -H "Authorization: bearer $TOKEN"
Run Code Online (Sandbox Code Playgroud)
它仍然不断地返回“访问被拒绝”,我在类似的示例中使用Keycloak-Quickstart Node Service进行了尝试,以查看其中是否存在更详细的错误。我收到的回复是
Validate grant failed
Grant validation failed. Reason: invalid token (wrong ISS)
Run Code Online (Sandbox Code Playgroud)
不过,如果我稍等一下,它会给我一个“过期令牌”错误,所以我觉得我走在正确的轨道上。
很明显,我发出令牌的地方与预期的地方不匹配,有问题吗?我可以通过 cURLing 进行调用以从 keycloak 服务器本身获取用户凭据
curl --data "grant_type=password&token=$TOKEN&client_secret=secret&client_id=account&username=myaccount&password=mypassword" http://keycloak.myexternaldomain.ca/auth/realms/TEST/protocol/openid-connect/token/introspect
Run Code Online (Sandbox Code Playgroud)
我是否误解了我应该如何使用 Keycloak,或者这是一个设置问题?
提前致谢
Cra*_*gle 13
我的问题出在我的 keycloak.json 中......我有一个与我正在验证的领域不同的领域。
如果您遇到此问题,我建议修改keycloak-auth-utils以便在授予管理器上提供更详细的错误日志记录。
具体改变
else if (token.content.iss !== this.realmUrl) {
reject(new Error('invalid token (wrong ISS)'));
}
Run Code Online (Sandbox Code Playgroud)
到
else if (token.content.iss !== this.realmUrl) {
reject(new Error('invalid token (wrong ISS) Expecting: '+this.realmUrl+' Got: '+token.content.iss);
}
Run Code Online (Sandbox Code Playgroud)
帮助我自己找到了这个问题。
| 归档时间: |
|
| 查看次数: |
14491 次 |
| 最近记录: |