请求权利
客户端应用程序可以使用特定端点来获取称为请求方令牌(RPT)的特殊安全令牌。该标记由用户评估与所请求的资源相关联的权限和授权策略的结果的所有权利(或权限)组成。使用RPT,客户端应用程序可以访问资源服务器上的受保护资源。
http://${host}:${port}/auth/realms/${realm_name}/authz/entitlement
获得权利
获取特定用户权限的最简单方法是使用HTTP GET请求。例如,使用curl:
curl -X GET \
-H "Authorization: Bearer ${access_token}" \
"http://localhost:8080/auth/realms/hello-world-authz/authz/entitlement/${resource_server_id}"
注意:当使用此端点请求授权时,您必须提供代表用户身份的access_token(作为承载令牌),并且他同意以他的身份访问授权数据。
在curl示例中,$ {resource_server_id}是客户机应用程序注册的client_id,作为资源服务器。因此,服务器响应是:
{
"rpt": ${RPT}
}
使用此方法获取权利,服务器将根据与资源服务器管理的资源相关联的权限和授权策略的评估,对用户的所有权利进行响应。
获取特定资源集的权利
您还可以使用权利端点来获取一个或多个资源的用户权利组。例如,使用curl:
curl -X POST -H "Authorization: Bearer ${access_token}" -d '{
"permissions" : [
{
"resource_set_name" : "Hello World Resource"
}
]
}' "http://localhost:8080/auth/realms/hello-world-authz/authz/entitlement/hello-world-authz-service"
因此,服务器响应是:
{
"rpt": ${RPT}
}
与GET版本不同,服务器使用RPT进行响应,该RPT保留在与正在请求的资源相关联的权限和授权策略的评估期间授予的权限。
在请求授权时,您还可以指定要访问的范围。例如,使用curl:
curl -X POST -H "Authorization: Bearer ${access_token}" -d '{
"permissions" : [
{
"resource_set_name" : "Hello World Resource",
"scopes" : [
"urn:my-app.com:scopes:view"
]
}
]
}' "http://localhost:8080/auth/realms/hello-world-authz/authz/entitlement/hello-world-authz-service"
请求方令牌
请求方令牌(RPT)是使用JSON Web签名(JWS)进行数字签名的JSON Web令牌(JWT)。令牌是基于客户端在授权过程中发送的access_token构建的。解码RPT时,会看到类似于以下内容的有效载荷:
{
"authorization": {
"permissions": [
{
"resource_set_id": "d2fe9843-6462-4bfc-baba-b5787bb6e0e7",
"resource_set_name": "Hello World Resource"
}
]
},
"jti": "d6109a09-78fd-4998-bf89-95730dfd0892-1464906679405",
"exp": 1464906971,
"nbf": 0,
"iat": 1464906671,
"sub": "f1888f4d-5172-4359-be0c-af338505d86c",
"typ": "kc_ett",
"azp": "hello-world-authz-service"
}
从该令牌可以从权限声明获取服务器授予的所有权限。