私はIdentity Brokering機能と外部IDPを使用しています。ユーザーが外部IDP UIにログインすると、KeyCloakブローカークライアントは外部IDPからJWTトークンを受け取り、KeyCloakはリソースにアクセスするJWTを提供します。私はDefault Identitiy Provider機能を設定しているので、ログイン時に外部IDPログイン画面がユーザに表示されます。つまり、ユーザーとそのパスワードは外部IDPに格納されます。外部IDP仲介を使用したKeyCloakによるプログラムによるユーザー名/パスワードアクセス
この問題は、テストでプログラマチックに「ダイレクトアクセス許可」(リソース所有者パスワードの付与)を使用してログインする必要がある場合に発生します。 KeyCloakにパスワードが保存されていないため、ログイン時に常にKeyCloakから401 Unauthorizedエラーが発生します。ユーザーパスワードを変更しようとすると、そのパスワードが機能し始めたので、ユーザーパスワードがKeyCloakにプロビジョニングされていないことと、「Direct Access Grant」を使用しているという問題があります。KeyCloakはプログラムによるログインで外部IDPを起動しません。
次のコードを使用してアクセストークンを取得しますが、有効なユーザー名とパスワードを渡すたびに401エラーが発生します。
org.keycloak.authorization.client.util.HttpResponseException: Unexpected response from server: 401/Unauthorized
ダイレクトアクセス許可が有効になっています。
public static String login(final Configuration configuration) {
final AuthzClient authzClient = AuthzClient.create(configuration);
final AccessTokenResponse accessTokenResponse = authzClient.obtainAccessToken(USERNAME, PASSWORD);
return accessTokenResponse.getToken();
}
解決方法はありますか?たとえば、「Direct Access Grant」でアイデンティティブローカーを呼び出すと、KeyCloakから有効なトークンが提供されます。