检查请求方令牌
有时可能想要内部请求方令牌(RPT)来检查其有效性或获取令牌内的权限,以在资源服务器端执行授权决策。
令牌检查有两个主要用例可以帮助您:
- 当客户端应用程序需要查询令牌有效性以获得具有相同或附加权限的新值时
- 在资源服务器端执行授权决策时,尤其是当内置的策略执行器都不适合您的应用程序时
获取关于RPT的信息
令牌内省本质上是一个OAuth2令牌内省兼容端点,您可以从中获取有关RPT的信息。
http://${host}:${port}/auth/realms/${realm_name}/protocol/openid-connect/token/introspect
要使用此端点内省RPT,可以按如下方式向服务器发送请求:
curl -X POST \
-H "Authorization: Basic aGVsbG8td29ybGQtYXV0aHotc2VydmljZTpzZWNyZXQ=" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d 'token_type_hint=requesting_party_token&token=${RPT}' \
"http://localhost:8080/auth/realms/hello-world-authz/protocol/openid-connect/token/introspect"
注意:上述请求使用HTTP BASIC并传递客户端的凭据(客户机ID和密码)来验证客户端尝试内省令牌,但可以使用Keycloak支持的任何其他客户端身份验证方法。
检查端点需要两个参数:
- token_type_hint
请使用requ_party_token作为此参数的值,表示您想要内窥RPT。
- token
使用在授权过程中由服务器返回的令牌字符串作为此参数的值。
因此,服务器响应是:
{
"permissions": [
{
"resource_set_id": "90ccc6fc-b296-4cd1-881e-089e1ee15957",
"resource_set_name": "Hello World Resource"
}
],
"exp": 1465314139,
"nbf": 0,
"iat": 1465313839,
"aud": "hello-world-authz-service",
"active": true
}
如果RPT不活动,则返回此响应:
{
"active": false
}
每次我想对RPT进行自检时,是否需要调用服务器?
否。授权和授权API都使用JSON网页令牌(JWT)规范作为RPT的默认格式。
如果要在不调用远程内省端点的情况下验证这些令牌,则可以解码RPT并在本地查询其有效性。
解码令牌后,还可以使用令牌内的权限来执行授权决定。
这本质上是策略执行者所做的。务必:
验证RPT的签名(根据领域的公钥)
基于其exp,iat和aud声明来查询令牌有效性