Keycloak API 总是返回 401

问题描述 投票:0回答:7

我正在尝试通过其 REST API 与 Keycloak 进行交互。我有主领域和默认管理员用户,以及一个测试领域。首先,我获得管理员帐户和测试领域的访问令牌:

let data = {
    grant_type : 'password',
    client_id : 'test-realm',
    username : 'admin',
    password : 'admin'
};
let headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
};
axios.post(
    'https://someurl.com:8080/auth/realms/master/protocol/openid-connect/token',
    qs.stringify(data),
    headers
)

效果很好。然后我尝试拨打电话来创建用户(或执行其他任何操作),但收到 401 未经授权的错误:

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': `Bearer ${accessToken}`
};
data = {
    rep: {
        email: "[email protected]",
        username: "[email protected]"
    },
    path: 'test-realm'
};
axios.post('https://someurl.com:8080/auth/admin/realms/test-realm/users',
    qs.stringify(data),
    headers
)

这不是包含令牌的正确方法吗?该访问令牌是您用于验证其他 API 调用的访问令牌吗?管理员帐户的令牌不应该用于验证对主领域其他客户端的调用吗?我必须在管理控制台中更改主领域中的某些设置吗?任何帮助表示赞赏。

api https access-token keycloak unauthorized
7个回答
17
投票

我收到了 401 错误,因为我使用 http://localhost:8080 生成了离线令牌,然后我尝试使用 http://keycloak:8080 请求 api,这是不允许的。不幸的是日志并没有告诉你这一点。

要调试 JWT 令牌,我建议https://jwt.io/


11
投票

这不是包含令牌的正确方法吗?

这是正确的做法。

你只是做了一些错误的事情。 请参考

keycloak-request-token
Node.js 模块中的示例:

https://github.com/keycloak/keycloak-request-token/blob/master/index.js#L43

你使用

client_id : 'test-realm'

但是有

client_id: 'admin-cli' 

那里。

此外,要创建用户,您应该使用

'Content-Type': 'application/json'

您可以在这里参考 Keycloak REST API 的 Node.js 示例:

https://github.com/v-ladynev/keycloak-nodejs-example/blob/master/lib/adminClient.js

其他有用的东西的例子,例如:

  • 自定义登录
  • 在 cookie 中存储 Keycloak 令牌
  • 中心化权限中间件

可以在同一个项目中找到:keycloak-nodejs-example


4
投票

我通过在 admin-cli 设置下启用下面的“服务帐户已启用”按钮来修复它


4
投票

我的问题是客户端身份验证设置为 true ,一旦我将其更改为 false ,它就起作用了


3
投票

我遇到了这个问题,并通过确保第一个和第二个 API 请求之间的时间不超过 1 分钟来解决它。因此,如果您手动执行此操作(2 个curl 请求),令牌可能会过期,并且您可能会收到错误 401。不过,您应该使用上面提到的 admin-cli。


2
投票

我最近遇到了这个问题,经过一段时间的挣扎后我发现了。通过 SDK 或 API 交互时,使用包含空格的域名将触发 401 未经授权的错误。

总结: 更改:域名 至:领域名称


0
投票

turn off client authentication its working

© www.soinside.com 2019 - 2024. All rights reserved.