実現したいこと
AWS環境のWebアプリのログイン認証をKeycloakのOpenID connectで行いたいです。
発生している問題・分からないこと
認証を終えてアクセストークンを取得するAPIを叩くとCode not validのエラーが発生します。
開発環境(Docker)では正常に動作していましたがAWS環境で試すとエラーになりました。
keycloakコンソールの設定も開発環境とあまり変わらないです。
初投稿で伝わりづらいかと存じますがご助力ください。
エラーメッセージ
error
1Webアプリ側のログ 2StatusCode:400 3ResponseBody : {"error":"invalid_grant","error_description":"Code not valid"} 4 5keycloak側のログ 6type=CODE_TO_TOKEN_ERROR, realmId=[realmId], clientId=[クライアントID], userId=null, ipAddress=[xx.x.x.xxx], error=invalid_code, grant_type=authorization_code, code_id=[コードID], client_auth_method=client-secret
該当のソースコード
Java
1URL url = new URL(dto.getAuthAccessTokenUrl()); 2 String requestBody = 3 Constant.KEYCLOAK_REQUEST_KEY_CLIENT_ID + EQUAL + dto.getClientId() + AND + 4 Constant.KEYCLOAK_REQUEST_KEY_GRANT_TYPE + EQUAL + Constant.KEYCLOAK_GRANT_TYPE_VALUE_AUTORIZATION_CODE + AND + 5 Constant.KEYCLOAK_REQUEST_KEY_REDIRECT_URI + EQUAL + dto.getRedirectUri() + AND + 6 Constant.KEYCLOAK_REQUEST_KEY_SCOPE + EQUAL + dto.getScope() + AND + 7 Constant.KEYCLOAK_REQUEST_KEY_CODE + EQUAL + code + AND + 8 Constant.KEYCLOAK_REQUEST_KEY_CLIENT_SECRET + EQUAL + dto.getSecret(); 9 10 http = (HttpURLConnection)url.openConnection(); 11 http.setRequestProperty(Constant.HEADER_CONTENT_TYPE, Constant.CT_X_FORM_URLENCODED); 12 http.setRequestProperty(Constant.HEADER_ACCEPT, Constant.CT_JSON); 13 http.setRequestMethod(HttpMethod.POST.toString()); 14 // リクエストボディをセット 15 http.setUseCaches(false); 16 http.setDoOutput(true); 17 OutputStreamWriter out = new OutputStreamWriter(new BufferedOutputStream(http.getOutputStream()), Constant.CHARSET_NAME_UTF8); 18 out.write(requestBody); 19 out.close(); 20 http.connect();
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
調べたこと
- keycloak code not vaidで検索
コードが複数回使用される、コードの使用期限が切れている、URLエンコードが間違えているというような情報を得ましたがどれも当てはまっていなさそう。
Authorization Enabled をonにするといいと情報もありましたが結果は変わりませんでした。
試したこと
- リストURLエンコードをUTF-8に指定する
- 認証リクエストのridirect_uriをエスケープする
補足
Keycloakのバージョンは15.0.2です。
AWSのECSにデプロイしています。
リクエスト
http://[ホスト]:[ポート]/auth/realms/[realm]/protocol/openid-connect/token
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。