Keycloak API始终返回401

时间:2017-10-23 05:41:43

标签: api https access-token keycloak unauthorized

我试图通过其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: "test@email.com",
        username: "test@email.com"
    },
    path: 'test-realm'
};
axios.post('https://someurl.com:8080/auth/admin/realms/test-realm/users',
    qs.stringify(data),
    headers
)

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

2 个答案:

答案 0 :(得分:4)

  

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

这是一种正确的方法。

你只是做错了什么。 请参考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

答案 1 :(得分:1)

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

要调试JWT令牌,我推荐https://jwt.io/