2017-07-28 1 views
0

J'essaie de vérifier les autorisations d'utilisateur d'un serveur keycloak via le keycloak authzclient. Mais échouer constamment, maintenant je ne suis pas sûr si j'ai quelques idées fausses sur le processus.Keycloak vérifier les autorisations via Authzclient

AuthzClient authzClient = AuthzClient.create(); 
String eat = authzClient.obtainAccessToken("tim", "test123").getToken(); 

AuthorizationResource resource = authzClient.authorization(eat); 

PermissionRequest request = new PermissionRequest(); 
request.setResourceSetName("testresource"); 

String ticket = authzClient.protection().permission().forResource(request).getTicket(); 
AuthorizationResponse authResponse = resource.authorize(new AuthorizationRequest(ticket)); 

System.out.println(authResponse.getRpt()); 

Le dernier appel authResponse.getRpt() échoue avec un 403 interdit. Mais les paramètres suivants de la console d'administration sont évalués à Permettre?

keycloak evaluation setting

La configuration du client est:

{ 
    "realm": "testrealm", 
    "auth-server-url": "http://localhost:8080/auth", 
    "ssl-required": "external", 
    "resource": "tv", 
    "credentials": { 
    "secret": "d0c436f7-ed19-483f-ac84-e3b73b6354f0" 
    }, 
    "use-resource-role-mappings": true 
} 

Le code suivant:

AuthzClient authzClient = AuthzClient.create(); 
String eat = authzClient.obtainAccessToken("tim", "test123").getToken(); 

EntitlementResponse response = authzClient.entitlement(eat).getAll("tv"); 
String rpt = response.getRpt(); 

TokenIntrospectionResponse requestingPartyToken = authzClient.protection().introspectRequestingPartyToken(rpt); 
    if (requestingPartyToken.getActive()) { 
     for (Permission granted : requestingPartyToken.getPermissions()) { 

      System.out.println(granted.getResourceSetId()+" "+granted.getResourceSetName()+" "+granted.getScopes()); 
     } 
    } 

me donne juste la "ressource par défaut"

7d0f10d6-6f65-4866-816b-3dc5772fc465 Default Resource [] 

Mais même quand Je mets cette ressource par défaut dans le premier extrait de code

... 
PermissionRequest request = new PermissionRequest(); 
request.setResourceSetName("Default Resource"); 
... 

il me donne un 403. Où ai-je tort?

Amitiés

Keycloak Server est 3.2.1.Final. Keycloak-authz-client est 3.2.0.Final.

Répondre

0

Les minutes après la publication ont trouvé le problème. Pardon. J'ai dû effectuer un EntitlementRequest.

AuthzClient authzClient = AuthzClient.create(); 
String eat = authzClient.obtainAccessToken("tim", "test123").getToken(); 

PermissionRequest request = new PermissionRequest(); 
request.setResourceSetName("testresource"); 

EntitlementRequest entitlementRequest = new EntitlementRequest(); 
entitlementRequest.addPermission(request); 

EntitlementResponse entitlementResponse = authzClient.entitlement(eat).get("tv", entitlementRequest); 
String rpt = entitlementResponse.getRpt(); 

TokenIntrospectionResponse requestingPartyToken = authzClient.protection().introspectRequestingPartyToken(rpt); 
if (requestingPartyToken.getActive()) { 
    for (Permission granted : requestingPartyToken.getPermissions()) { 
     System.out.println(granted.getResourceSetId()+" "+granted.getResourceSetName()+" "+granted.getScopes()); 
    } 
} 

ouputs: 27b3d014-b75a-4f52-a97f-dd01b923d2ef TestResource []

Sincères salutations