无法访问Keycloak REST API方法*404*

24
我正在使用Docker中的最新Keycloak镜像,并可以访问标准管理控制台 http://localhost:9080。然而,我似乎无法访问文档中指定的任何路径以进行管理REST API。例如,基本路径为/auth和资源获取属于领域的客户端返回属于领域的客户端列表:/{realm}/clients 我得到了404错误。对于文档中的任何其他方法也是如此。唯一返回有效200 json响应的路径是http://localhost:9080/auth/realms/{realm-name}/,根据文档,它应该在basepath + "/{realm-name}"处可达。我是否遗漏了什么或尝试使用错误的基本路径访问?Docker中的Keycloak版本为3.4.3.Final,这是文档中最新版本的Keycloak。

3
你尝试过使用 http://localhost:9080/auth/admin/realms/{realm}/clients 吗? - Alex Karasev
4个回答

32

我几乎确定你试图这样调用端点:

http://localhost:9080/auth/admin/realms/demo/clients

然而,你错过了这一部分/auth/admin/realms

请不要忘记首先按照这里所述授权你的调用

更新

以下是我的步骤以查看结果:

$ docker run -d -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak

获取 access_token:

$ curl -X POST \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -d 'username=admin&password=admin&client_id=admin-cli&grant_type=password' \
    http://localhost:9080/auth/realms/master/protocol/openid-connect/token  

编辑:从keycloak 17.0版本开始,应省略/auth路径段,因此正确的URL为http://localhost:9080/realms/master/protocol/openid-connect/token 参考:https://dev59.com/xVEG5IYBdhLWcg3wNGnZ#71634718

复制并粘贴获得的access_tokenAuthorization头中:

$ curl -X GET \
    -H 'Authorization: Bearer <access_token_goes_here>' \
    http://localhost:9080/auth/admin/realms/master/clients
    

2
即使将演示替换为有效的领域,仍无法工作。我尝试使用AdvancedRESTClient发送与管理员控制台使用的相同Authorization标头,但仍然收到404错误。我已经尝试过使用docker化的Keycloak和独立的Keycloak。 - Taha Rehman Siddiqui
您提到的“授权错误”的观点对我的情况很有用,因为奇怪的是,在经过身份验证后从浏览器访问相同的网址对我来说并没有成功。但是当我通过Postman将Bearer令牌发送到相同的URL时,它却成功了。 - tryingToLearn
3
@TahaRehmanSiddiqui,它帮助了9个人。也许现在是接受答案的时候了;-) - Alex Karasev
1
@AlexKarasev 谢谢。但我的问题是针对不同的API。我使用此URL“POST /auth/admin/realms/master/clients/7534ac42-fe8b-4cde-b6c6-c385f4958e3b/roles”创建新客户端角色时收到400错误...服务器上没有任何错误。在KC文档中,URL为“/{realm}/clients/{client}/roles”,但该URL返回404。文档:https://www.keycloak.org/docs-api/14.0/rest-api/ - xbmono

3

在版本17.0.1中,我最终使用以下方法来使用rest API:

http://localhost:8080/admin/realms/{实例名称}/clients


1
他们现在已经更新为:
http://localhost:9080/realms/demo/clients

我花了一整天的时间才发现它与文档所述有所不同。

配置端点可以在Keycloak控制台的领域设置下找到。在端点部分,它将向您展示所有需要的端点。


1
在我的情况下,是因为文档误导了我:

https://www.keycloak.org/docs-api/17.0/rest-api/index.html#:~:text=Version%3A%201-,URI%20scheme,-Host%3A%20localhost%3A8080

使用的完整路径应包含admin关键字,例如:

https://myhost.com/auth/admin/realms/myrealm/users/

改为:

https://myhost.com/auth/realms/myrealm/users/

这是一个从未解决的问题: https://issues.redhat.com/browse/KEYCLOAK-7966 此外,该端点可能需要访问令牌,例如:
curl -H "Authorization: bearer YOUR_ACCESS_TOKEN" https://myhost.com/auth/admin/realms/myrealm/users/"

谢谢,这对我有帮助。我觉得你说文档误导时太客气了。我认为它们完全错误,它们给出的示例URL是"例如 http://localhost:8080/admin/realms",注意缺少了 'auth'。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接