我需要能够执行以下操作(使用普通的cURL和JSON服务器端 - 没有框架或Java):
使用第三方提供的Keycloak访问令牌的字符串表示来验证令牌是否有效。
如果令牌有效,请获取该用户的Keycloak ID。
如何使用普通的旧HTTP帖子执行此操作?我发现了很多Java示例,但我需要知道下面的原始HTTP POST和响应。
验证令牌是否是这样的?
/auth/realms/<realm>/protocols/openid-connect/validate?access_token=accesstokenhere
这在数据方面有什么回报(对不起,我目前没有要测试的测试服务器)?
感谢。
答案 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"