Keycloak: 验证访问令牌并获取Keycloak ID

6

我需要使用纯cURL和JSON服务器端(无框架或Java)来完成以下操作:

  1. 使用第三方提供的Keycloak访问令牌的字符串表示形式来验证令牌是否有效。

  2. 如果令牌有效,则获取该用户的Keycloak ID。

如何使用普通的HTTP POST请求完成此操作?我已经找到了很多Java示例,但我需要了解底层的原始HTTP POST请求和响应。

验证令牌是这样的吗?

/auth/realms/<realm>/protocols/openid-connect/validate?access_token=accesstokenhere

这个代码返回什么数据呢(抱歉我目前没有测试服务器来查询)?
谢谢。
2个回答

3
也许您需要这个链接:http://lists.jboss.org/pipermail/keycloak-user/2016-April/005869.html 唯一的问题是,introspect 在公共客户端中无法使用。
关键 URL 是:"http://$KC_SERVER/$KC_CONTEXT/realms/$REALM/protocol/openid-connect/token/introspect"
您需要对您的客户端进行授权,例如基本身份验证,并需要提供请求者令牌以便进行 introspect。
curl -u "client_id:client_secret" -d "token=access_token_to_introspect" "http://$KC_SERVER/$KC_CONTEXT/realms/$REALM/protocol/openid-connect/token/introspect"

当您说introspect在公共客户端上不起作用时,是指使用浏览器的前端应用(如react,angular等)吗?因为实际上我可以从postman、curl、后端node应用程序中访问keycloak introspect端点,但是当我尝试从我的前端应用程序中访问时出现CORS错误。 - Hector

3
验证终端点似乎现在不起作用了。它曾经返回访问令牌。我现在使用的是Keycloak 2.5.1。如Matyas的帖子中所提到的(以及他引用的post),必须使用introspect令牌终端点。
在我的测试中,Bearer身份验证无法工作。必须使用基本身份验证头以及base64编码的客户端凭据
base64.encode("<client_id:client_secret>".getBytes("utf-8"))

从Maytas引用的帖子中可以看出,introspect端点的响应是JSON格式的,并且根据要 introspect 的令牌类型有许多字段。在我的情况下,token_type_hint被设置为access_token
requestParams = "token_type_hint=access_token&token=" + accessToken

响应包含必要的用户详细信息,如用户名、角色和资源访问。还包括 OAuth 规定的属性,如 active、exp、iss 等。有关详细信息,请参见 rfc7662#page-6。

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