web-dev-qa-db-ja.com

REST管理者アカウントなしでKeycloakユーザーを取得する方法

REST [〜#〜] without [〜#〜]経由でKeycloakレルムのユーザーのリストを取得する方法はありますか?管理コンソールから割り当て可能な役割のようなものですか?アイデアを探しています。

現在、管理者の資格情報を使用してアクセストークンを取得し、そのトークンを使用してrealm/users 終点。

トークンの取得(node.jsアプリからrequest経由):

uri: `${keycloakUri}/realms/master/protocol/openid-connect/token`,
form: {
  grant_type: 'password',
  client_id: 'admin-cli',
  username: adminUsername,
  password: adminPassword,
}

トークンの使用:

uri: `${keycloakUri}/admin/realms/${keycloakRealm}/users`,
headers: {
  'authorization': `bearer ${passwordGrantToken}`,
}

クライアントアプリケーションから汎用ユーザー情報(ユーザー名、メール、フルネーム)を使用できるようにしたい。

12
Borja Canseco

目的のユーザーに対して、view-usersクライアントからrealm-managementロールを割り当てる必要があります。これがユーザーの構成になります。

enter image description here

その後、${keycloakUri}/admin/realms/${keycloakRealm}/usersエンドポイントからすべてのユーザーを取得できます。これは、Postman経由でアクセスした、エンドポイントから取得した情報です。

enter image description here

また、質問とは無関係に、絶対に必要でない限り、grant_type=passwordを使用しないことを強くお勧めします。 keycloak blog から:

RESULT=`curl --data "grant_type=password&client_id=curl&username=user&password=password" http://localhost:8180/auth/realms/master/protocol/openid-connect/token`

これは少し不可解であり、幸い、これは実際にトークンを取得する方法ではありません。トークンは、WebアプリケーションがKeycloakログインページにリダイレクトして取得する必要があります。これを行っているのは、まだサービスを呼び出すことができるアプリケーションがないため、サービスをテストできるためです。基本的に、ここで行っているのは、トークンのユーザー名とパスワードの交換を許可するリソース所有者認証フローであるパスワードに設定された付与タイプで、Keycloaks OpenID Connectトークンエンドポイントを呼び出すことです。

Oauth2 spec も参照してください。

16
Xtreme Biker