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

时间:2016-08-11 09:56:34

标签: json curl keycloak

我需要能够执行以下操作(使用普通的cURL和JSON服务器端 - 没有框架或Java):

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

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

  3. 如何使用普通的旧HTTP帖子执行此操作?我发现了很多Java示例,但我需要知道下面的原始HTTP POST和响应。

    验证令牌是否是这样的?

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

    这在数据方面有什么回报(对不起,我目前没有要测试的测试服务器)?

    感谢。

2 个答案:

答案 0 :(得分:3)

验证端点现在似乎不起作用。它曾用于返回访问令牌。我现在正在使用keycloak 2.5.1。正如Matyas在帖子中提到的那样(以及他引用的post),必须使用introspect令牌端点。

在我的测试中,承载认证不起作用。必须使用基本身份验证标头以及base64编码的客户端凭据

base64.encode("<client_id:client_secret>".getBytes("utf-8"))

内省端点的响应是JSON格式,由Maytas引用的帖子共享,有很多字段基于被内省的令牌类型。在我的情况下, token_type_hint 设置为 access_token

requestParams = "token_type_hint=access_token&token=" + accessToken

响应包括用户详细信息,如用户名,角色和资源访问权限。还包括OAuth强制属性,如active,exp,iss等。有关详细信息,请参阅rfc7662#page-6。

答案 1 :(得分:2)

也许你需要这个: http://lists.jboss.org/pipermail/keycloak-user/2016-April/005869.html

唯一的问题是,内省不与公共客户合作。

关键网址是: 的 “http:// $ KC_SERVER / $ KC_CONTEXT /领域/ $ REALM /协议/ OpenID的连接/令牌/反思”

您需要授权您的客户,例如使用基本身份验证,并且需要将请求者令牌提供给内省:

curl -u "client_id:client_secret" -d "token=access_token_to_introspect" "http://$KC_SERVER/$KC_CONTEXT/realms/$REALM/protocol/openid-connect/token/introspect"