Linuxコンテナを使用してKubernetesクラスタで実行されている.NETCore2.0アプリケーションがあります。アプリケーションの前に、LetsEncrypt、SSLターミネーション、およびhttpをアプリに転送するように設定されたNginxリバースプロキシがあります。
私のアプリはローカルで(リバースプロキシなしで)正常に認証およびリダイレクトされ、次のサンプルフォームに基づいています:https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore
このセットアップを展開すると、最初はアプリがhttps://my.domain.cloudapp.azure.comからhttp://my.domain.cloudapp.azure.comに切り替えてユーザーを認証しようとするときに問題が発生しました。その結果、返信URL(https://my.domain.cloudapp.azure.com/signin-oidc)が使用されておらず、エラーが発生しました。
私はこことここからの情報でこれを修正することができました、そして特に私は追加しました:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.Use(async (context, next) =>
{
if (context.Request.Host.Host.ToLower() != "localhost")
context.Request.Scheme = "https";
await next.Invoke();
});
https://my.domain.cloudapp.azure.comにアクセスすると、https://login.microsoftonline.com/に正しくリダイレクトされます。認証後、https: //my.domain.cloudapp.azure.comのアプリにリダイレクトされますが、OpenIDConnect認証ミドルウェアが/ signin-oidcルートを処理していないようです。代わりに404エラーが表示されます。
誰かが私が間違っていることを知っていますか?
この問題の原因となっている2つの問題が発生しました。まず、Kubernetesでアプリを提供する複数のポッドがあったため、Cookieの暗号化/復号化キーを中央の場所に保持する必要がありました。
2番目の問題は、リバースプロキシが応答URLを書き換えていたことです。私のプロジェクトは元の投稿から少し変更され、OAuth2プロキシに切り替えたため、元の投稿でのNginxの正確なシナリオがわかりません。ただし、Oauth2プロキシの場合、アプリ登録の返信URLとして「https://my.domain.cloudapp.azure.com/oauth2/callback」を追加する必要がありました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加