2017-07-28 10 views
0

私はkeycloak authzclientを介してkeycloakサーバーからのユーザー権限をチェックしようとしています。しかし、絶えず失敗している今、私はプロセスに関するいくつかの誤解があるかどうかはわかりません。Authzclientを介したKeycloakチェックの許可

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()); 

最後の呼び出しであるauthResponse.getRpt()は、403が禁止されて失敗します。 管理コンソールの次の設定は[許可]に評価されますか?

keycloak evaluation setting

クライアントの設定は次のとおりです。

{ 
    "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 
} 

次のコード:

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()); 
     } 
    } 

はちょうど私の "デフォルトのリソース"

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

しかし、たとえ与えます私はこのデフォルトリソースを最初のコードスニペットに入れます

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

これは403です。どこが間違っていますか?

種類について

Keycloak Serverは3.2.1です。 keycloak-authz-clientは3.2.0.Finalです。

答えて

0

投稿後数分で問題が見つかりました。ごめんなさい。私は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 []は

種類が

に関して
関連する問題