2017-10-23 5 views
0

私は以下のコードを使用してkeycloakでユーザーにログインします。2)ユーザーが特定のリソースにアクセスする特定の役割を持っているかどうかを確認します。oauth.getTokenレスポンスのロールにアクセスするvert.x keycloak

JsonObject keycloakJson = new JsonObject() 
     .put("realm", "OQM") // (1) 
     .put("realm-public-key", "MIIBIwercerewrcewrc7BAij3P+Nz76opTVlhWijnIGefnBygViDrUdxS/nZSDTkXrFnKy2lpNZyecWrNVD6Zs6w65pBa60zDWODkuIqE6LbbfwHBs5RyvuzAFRtRFbieZub8x4suzN5pJOUPWdtgWqQasdawercwerewvrewrvewrcwxewrvbewvrxw9k+TPKGdf3e9QXL9FGG/9084+6Z8RSZ4JL4v5YqVtpDyohf9MPJwn/i46KcAYzgleJFFCqwuPry8CEzafqXVlzIEkSqwIDAQAB") // (2) 
     .put("auth-server-url", "http://152.18.17.63:8080/auth") 
     .put("ssl-required", "external") 
     .put("resource", "oqm") // (3) 
     .put("credentials", new JsonObject().put("secret", "2343253252-c8f1-42b2-866c-87a2a7ff95f6")); // (4) 

OAuth2Auth oauth2 = KeycloakAuth.create(vertx, OAuth2FlowType.PASSWORD, keycloakJson); 

JsonObject tokenConfig = new JsonObject().put("username", "dummyUser").put("password", "password").put("scope", "modify-account view-account"); 

oauth2.getToken(tokenConfig, res -> { 
    if (res.failed()) { 
     rc.response().setStatusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.code()).end(); 
    } else { 
     AccessToken token = (AccessToken)res.result(); 
     token.isAuthorised("ReleaseOrders", handler -> { 
      if(handler.result()) { 
       HttpServerResponse response = VerticleUtils.buildOKHeaders(rc); 
       response.end(Json.encodePrettily(token.principal())); 
      } 
      else { 
       VerticleUtils.notAuthorized(rc); 
      } 
     }); 
    } 
}); 

ただし、ユーザーが承認されているロールの一覧を取得する必要があります。 AccessTokenオブジェクトが返されましたが、そのアクセスはプライベートなので、アクセスできません。

enter image description here

enter image description here

+0

あなたは 'principal()'を使って試しましたか? JSONObjectを保持し、その中にロールを見つける必要があります。 –

+0

プリンシパルがトークンプロパティーを返します –

答えて

0

現在、あなただけのprincipal()メソッド呼び出しからの完全なトークンを取得することができます。 3.5.1では、AcessTokenオブジェクトからトークンを公開しています。

+0

私たちは誰ですか、3.5.1バージョンは何ですか? –

+0

私はoauth2コードの主な開発者です。私はチーム名で話していました。 3.5.1は開発版の最新版です。 –

関連する問題