keycloak-のauthz-クライアント(6.0.1)のみ(春のセキュリティ)を使用して、私は私のサービスプロバイダからのユーザー情報とユーザーグループを読み込む必要があります。
適切なアクセストークンを取得した後、AuthzClientのおかげで、私は、ユーザー情報のAPIに到達することができました:
UriBuilder target = UriBuilder.fromUri(kcURL);
target.path("realms/{realm}/protocol/openid-connect/userinfo")
.resolveTemplate("realm", this.realm);
UserInfoOIDC info = new UserInfoOIDC();
try {
UserInfo response = this.buildBearerInvocation(target, accessToken).get(UserInfo.class);
info.setName(response.getName());
info.setUsername(response.getPreferredUsername());
info.setCompleted(true);
log.info("User info successfully retrieved from {}", this.realm);
} catch (WebApplicationException e) {
log.error("User info failure on {}: {}", this.realm, e.getMessage());
}
...
private Invocation.Builder buildBearerInvocation(UriBuilder target, String accessToken) {
WebTarget webTarget = restClient.target(target);
Invocation.Builder builder = webTarget.request(APPLICATION_JSON)
.header(AUTHORIZATION, "Bearer " + accessToken);
return builder;
}
しかし、私は、「管理API」にアクセスできませんでした:
UriBuilder target = UriBuilder.fromUri(kcURL);
target.path("admin/realms/" + this.realm);
target.path("users/" + userId);
target.path("groups");
try {
return this.buildBearerInvocation(target, accessToken)
.get(GroupRepresentation.class);
} catch (WebApplicationException e) {
log.error("User groups failure on realms {}: {}", this.realm, e.getMessage());
}
[メイン] INFO com.LoggingFilter -処理にhttp:// localhost:8080 /認証/管理/王国/ TestRealm /ユーザー/ 0f443554-01d0-4b40-a652-0c8c174632d4 /グループを [メイン] ERROR com.KeycloakProvider -上のユーザー・グループの失敗レルムのTestRealm:HTTP 403禁止
それかもしれないが、単に不十分なユーザのアクセス権から来るかというCORSから任意のものであろうと、すべてでは必ず、私は私のetc / hostsファイルに「127.0.0.1 localhostの-AUTH」を追加しました(ここではない発行する場合、私は思ったんだけど)けれども、ここに助けます。どのように私は、ユーザー、より多くのCORSの設定やユーザーのための特別な役割を「管理API」を開くことができますか?
EDITED - Keycloak管理クライアントは、ここで助けにはなりません(HTTP 403だけでなくとして禁止):
@Test
public void checkKeycloakAdminClient() {
Keycloak client = KeycloakBuilder.builder()
.serverUrl(url)
.realm(realm)
.username(adminUsername)
.password(adminPassword)
.clientId(clientId)
.clientSecret(clientSecret)
.build();
RealmResource realmResource = client.realm(realm);
UsersResource usersResource = realmResource.users();
List<UserRepresentation> users = usersResource.search(username);
}
(ユーザー/ロールのマッピングを参照してください)管理者ユーザにすべての「ビュー-...」と「クエリ...」「レルムの管理」から利用できるクライアントの役割レルムのクライアントを割り当てます。