web-dev-qa-db-ja.com

IdentityServer 4、OpenIdConnectは外部サインインURLにリダイレクトします

IdentityServer4を使用して構築されたIdentityサーバーに接続する複数の小さなASP.NetコアMvcサービスを構築しようとしています。

このようなMVCサービスでOpenIdOptionを設定しました

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationScheme = "Cookies"
});

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    AuthenticationScheme = "oidc",
    SignInScheme = "Cookies",

    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,

    ClientId = "mvc",
    ClientSecret = "secret",

    ResponseType = "code id_token",
    Scope = { "api1", "offline_access" },

    GetClaimsFromUserInfoEndpoint = true,
    SaveTokens = true
});

ここで、http://localhost:5000は、Identityサーバーが実行されているエンドポイントです。たとえば、MVCサーバーがhttp://localhost:5002にある場合、コントローラーに[Authorize]属性を設定すると、IDサーバーにリダイレクトされ、チェックが失敗すると、http://localhost:5002/signin-oidcにあるサインインページが検索されます。

今私が抱えている問題は、ログインページをIdentity Serverでホストされているhttp://localhost:5000/signin-oidcでホストして、すべてのMVCサービスがこれを利用してユーザーIDを取得するようにしたいということですが、残念ながら、これを設定する方法がわかりませんRedirectUrl

enter image description here

フローを参照してダイアグラムがどのように機能するかが不正確であることはわかっていますが、達成したいことを単純化しようとしています:)

これを達成することは可能ですか?

よろしくキラン

7
Kiran

あなたはその/signin-oidcルートが何のためにあるのか誤解しているようです。一般的なフローは次のように機能します。

  1. ユーザーがASP.NETCoreサイトにアクセスします。
  2. アプリは、デフォルトの認証スキーム"Cookies"に認証を要求します。
    1. Cookie認証ハンドラーは、(署名された)Cookie情報からIDを復元しようとします。
    2. Cookieがないため、Cookie認証は失敗します。
  3. アプリは、デフォルトのチャレンジスキーム"oidc"に、認証チャレンジを実行するように要求します。
    1. OpenIdConnect認証ハンドラーはOpenIdConnect認証プロバイダーにリダイレクトします。これがIDサーバーです。
    2. ユーザーはIdentityServerに正常にログインします。
    3. ユーザーは、OpenIdConnect認証ハンドラーのリモートサインインアドレスである/signin-oidcにPOSTされます。
    4. OpenIdConnect認証ミドルウェアは/signin-oidcルートを処理し、IdentityServerによって行われたサインイン要求からユーザー情報を取得します。
    5. OpenId Connect認証スキームは、認証チケットを作成し、構成されたサインインスキームにユーザーのサインインを要求します。
  4. Cookie認証スキームは、サインインプロセスを処理し、ユーザーIDを作成します。 IDをCookieに保存するため、認証チャレンジパイプライン全体を再度実行しなくても、今後のリクエストでIDを取得できます。
  5. ユーザーはサインインしています。

したがって、/signin-oidcエンドポイントは、アプリケーションに戻ってcomplete OpenIdConnect認証フローのサインインプロセスに戻る方法です。ユーザーがこのアドレスに到達するまでに、ユーザーはすでにIdentity Serverにサインインしており、アプリケーションにリダイレクトされて、最初に中断したところから続行します。

通常、ユーザーがそのルートに費やす時間は最小限です。これは、サインイン要求が処理された直後に「適切な」アプリケーションルートにリダイレクトされるためです。

いいえ、ここにはログインフォームはありません。ログインプロセス自体は、OpenIdConnect認証プロバイダーであるIdentityServerの責任です。これが全体のポイントなので、たとえばgoogle.comではなく、my-random-and-probably-untrusted-app.example.comに安全にログインしてください。実際のGoogle認証情報を取得することは絶対に避けてください。

41
poke