3

所以我在让我的 Keycloak-Connect 样本工作时遇到了一些问题。

基本上,我在我的 VM 上的快速路由上使用 Keycloak 进行了简单检查

(10.10.10.54:8081) 如下。

app.get('/api*', keycloak.protect(), (req, res) => res.status(200).send({
    message: 'Hit API Backend!',
}));

我的 Keycloak 服务器位于单独的 VM 上(对于此示例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`

这每次都会返回正确的访问令牌,

TOKEN=`echo $RESULT | sed 's/.*access_token":"//g' | sed 's/".*//g'`  

将令牌解析为变量。

curl http://10.10.10.54:8081/api -H "Authorization: bearer $TOKEN"

仍然不断返回拒绝访问,我在Keycloak-Quickstart 节点服务的类似示例中尝试了此操作,以查看其中是否存在更详细的错误。我收到的是

Validate grant failed
Grant validation failed. Reason: invalid token (wrong ISS)

虽然如果我稍等片刻,它会给我一个 Expired Token 错误,所以我觉得我在正确的轨道上。

所以很明显,我从不匹配预期的地方发出令牌的地方有问题?我可以通过 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

我是否误解了我应该如何使用 Keycloak,或者这是一个设置问题?

提前致谢

4

3 回答 3

4

我的问题在我的 keycloak.json 中......我有一个不同的领域与我正在验证的领域。

如果您遇到此问题,我建议您修改keycloak-auth-utils以在授权管理器上为您提供更详细的错误日志记录。

具体改变

else if (token.content.iss !== this.realmUrl) {
      reject(new Error('invalid token (wrong ISS)'));
}

else if (token.content.iss !== this.realmUrl) {
      reject(new Error('invalid token (wrong ISS) Expecting: '+this.realmUrl+' Got: '+token.content.iss);
}

帮助我自己找到了这个问题。

于 2017-09-07T18:04:16.660 回答
0

如果您在 localhost 中工作并遇到同样的问题,我的问题是我在 localhost 中使用 https,realmUrl: "https://localhost:8080/auth/realms/master"而不是realmUrl: "http://localhost:8080/auth/realms/master"

于 2020-08-12T20:16:21.933 回答
0

我也面临同样的问题。我使用以下检查来解决这个问题

1.检查项目中的配置

  • 是 serverurl 精确的(127.0.0.1,localhost,0.0.0.0 是不同的 url ..mention 与 keycloak url 相同)
  • 小情况下是境界
  • 是客户 ID 和秘密是正确的

如果您仍然遇到问题,请尝试使用单引号而不是双引号 ex-

realm_name:"demo-realm" --> realm_name:'demo-realm'

它对我有用

于 2021-12-02T04:48:02.133 回答