2017-11-29 5 views
1

私は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から有効なトークンが提供されます。

答えて

0

問題は、KeyCloakに初期IDプロバイダのパスワードに関する情報がないことです。彼らはtoken exchange featureを持っています。これは、プログラム的なトークン交換に使用する必要があります。

関連する問題