所以我在让我的 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,或者这是一个设置问题?
提前致谢