質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Keycloak

Keycloakとは、一度の認証で多くのシステム利用が可能になるシングルサインオン(SSO)のオープンソースソフトウェアです。OpenID ConnectやSAMLなどのシングルサインオンのプロトコルに対応。IdPとして用いることができます。ソーシャルサービスでの認証機構の利用も可能です。

OpenID Connect

OpenID Connectは、 様々なWebサイトや、 モバイルアプリなどを利用する際に一つのID情報のみで 認証を実現できるようにするID連携の仕組みです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

Q&A

0回答

128閲覧

ASP.NET Web APIのOpenID Connect認証でKeycloakにログインしたときに431エラーになる

qafchel

総合スコア2

Keycloak

Keycloakとは、一度の認証で多くのシステム利用が可能になるシングルサインオン(SSO)のオープンソースソフトウェアです。OpenID ConnectやSAMLなどのシングルサインオンのプロトコルに対応。IdPとして用いることができます。ソーシャルサービスでの認証機構の利用も可能です。

OpenID Connect

OpenID Connectは、 様々なWebサイトや、 モバイルアプリなどを利用する際に一つのID情報のみで 認証を実現できるようにするID連携の仕組みです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

0グッド

0クリップ

投稿2024/09/05 07:02

実現したいこと

ASP.NET Core Web APIでKeycloakを用いたOpenID Connect認証を行えるようにしたい。

発生している問題・分からないこと

作成したASP.NET Core Web APIアプリケーションにおけるOpenID Connect認証でKeycloakにログインしたら431エラーになりました。
ログイン処理を開始したらKeycloakのIDとパスワードの入力画面までは表示されるのですが、IDとパスワードを入力を終えた後に431エラーの画面になります。

エラーメッセージ

error

1このページは動作していません 2この問題が何度も発生する場合は、サイト所有者にお問い合わせください。 3HTTP ERROR 431

該当のソースコード

Program.csのWebApplication.CreateBuilder(args)を呼び出している個所から下の部分

1var builder = WebApplication.CreateBuilder(args); 2 3#if DEBUG 4var MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; 5 6builder.Services.AddCors(options => 7{ 8 options.AddPolicy(name: MyAllowSpecificOrigins, 9 policy => 10 { 11 policy.WithOrigins("http://localhost:4200"); 12 }); 13}); 14#endif 15 16builder.Services.AddAuthentication(options => 17{ 18 options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; 19 options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; 20 options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; 21}) 22 .AddCookie() 23 .AddOpenIdConnect(options => 24 { 25 options.Authority = builder.Configuration["oidc:authority"]; 26 options.ClientId = builder.Configuration["oidc:clientid"]; 27 options.ClientSecret = builder.Configuration["oidc:clientsecret"]; 28 options.ResponseType = "code"; 29 options.SaveTokens = true; 30 options.Scope.Add("openid"); 31 options.Scope.Add("profile"); 32 options.Scope.Add("email"); 33 options.CallbackPath = "/login-callback"; 34 options.SignedOutCallbackPath = "/logout-callback"; 35 });

Program.csのbuilder.Build()から下の部分

1var app = builder.Build(); 2 3#if DEBUG 4app.UseCors(MyAllowSpecificOrigins); 5#endif 6 7// Configure the HTTP request pipeline. 8 9app.UseHttpsRedirection(); 10 11app.UseAuthentication(); 12app.UseAuthorization(); 13 14// Add routes for callback handling 15app.Map("/login-callback", loginCallbackApp => 16{ 17 loginCallbackApp.Run(async context => 18 { 19 // Handle the callback from Keycloak after successful authentication 20 await context.Response.WriteAsync("Authentication successful"); 21 }); 22}); 23 24app.Map("/logout-callback", logoutCallbackApp => 25{ 26 logoutCallbackApp.Run(async context => 27 { 28 // Handle the callback from Keycloak after sign-out 29 await context.Response.WriteAsync("Sign-out successful"); 30 }); 31}); 32 33app.MapControllers(); 34 35app.Run(); 36

AccountController.csのログインに関する部分

1 2 [HttpGet("login")] 3 public IActionResult Login() 4 { 5 var redirectUrl = Url.Action(nameof(LoginCallback), "Auth"); 6 var properties = new AuthenticationProperties { RedirectUri = redirectUrl }; 7 return Challenge(properties, OpenIdConnectDefaults.AuthenticationScheme); 8 } 9 10 [HttpGet("login-callback")] 11 public async Task<IActionResult> LoginCallback() 12 { 13 var authenticateResult = await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme); 14 if (!authenticateResult.Succeeded) 15 { 16 return BadRequest(); // 認証失敗時の処理 17 } 18 19 // 認証成功時の処理 20 return Redirect(defaultReturnUrl); 21 } 22 23 [HttpGet("logout")] 24 public async Task<IActionResult> Logout() 25 { 26 await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); 27 await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme); 28 return Redirect(defaultReturnUrl); 29 }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Copilotに質問しましたが改善できませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qafchel

2024/09/05 09:17

.NETとKeycloakのバージョンが抜けていましたので追記します。.NETは8、Keycloakは25.0.4になります。
qafchel

2024/09/06 00:17

エラー発生時のURLの長さは902でした。 Cookieを確認してみたところ、以下の項目がありました。 * .AspNetCore.Cookies (Size: 27) * .AspNetCore.CookiesC1 (Size: 4008) * .AspNetCore.CookiesC2 (Size: 3720) * AUTH_SESSION_ID (Size: 51) * AUTH_SESSION_ID_LEGACY (Size: 58) * KC_RESTART (Size: 2239) * KEYCLOAK_IDENTITY (Size: 607) * KEYCLOAK_IDENTITY_LEGACY (Size: 614) * KEYCLOAK_SESSION (Size: 99) * KEYCLOAK_SESSION_LEGACY (Size: 106)
qafchel

2024/09/06 00:44

Choromeで確認したことですが、一度この症状が出ると同じブラウザ上の別のウィンドウまたはタブでKeycloakの管理画面を開こうとすると中央に処理中であることを示すアイコンが回転しているだけの状態になります。この時のCookieの内容はログイン時にエラーが発生した時と同じでした。 これは、Chromeの画面をすべて閉じたら収まります。
qafchel

2024/09/06 00:51

Chromeでエラーが発生したときのヘッダー情報を確認したところ、Response HeadersでのContent-Lengthが2101、Request HeadersでのContent-Lengthが47でした。
qafchel

2024/09/06 02:38

confフォルダー内に「quarkus.properties」ファイルを作成して、その中を以下の内容にすることでヘッダーの上限を設定しましたが改善しませんでした。 quarkus.http.limits.max-header-size=262144 quarkus.http.access-log.enabled=true quarkus.http.access-log.log-to-file=true quarkus.http.access-log.pattern=%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" %D quarkus.http.record-request-start-time=true
qafchel

2024/09/06 02:44

confフォルダー内に「application.properties」ファイル作成して、その内容を以下の通りにすることで指定することも試みましたが改善できませんでした。 quarkus.http.limits.max-header-size=262144
qafchel

2024/09/06 03:06

前述の「application.properties」を「standalone\configuration」フォルダーに移動してみましたが変化は見られませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問