asp.netコア3.1のテナントに基づく認証スキームを登録する


12

現在、デフォルトのクライアントIDとシークレットを備えた外部ログインプロバイダーを備えたIdentity Server 4 Webアプリケーションを作成しています。しかし、私の目標は、テナントに基づいてAzure、Google、Facebookなどの認証プロバイダーを登録することです。

私はSaasKitマルチナンシーアセンブリを使用しましたが、ここではapp.usepertenant()ミドルウェアを試しました。ただし、UseGoogleAuthentication()メソッドは廃止されたため、このusepertenantミドルウェアを使用してマルチテナント認証を実現できませんでした。

現在のコード、

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
   .AddMicrosoftAccount(option =>
     {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
     });

期待されるコードは以下のようです、

var authentication = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);

if (tenant.hasMicrosoft)
{
   authentication.AddMicrosoftAccount(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

if (tenant.hasGoogle)
{
   authentication.AddGoogle(option =>
   {
        option.ClientId = "clientid";
        option.ClientSecret = "clientsecret";
        option.SaveTokens = true;
   });
}

authentication.AddCookie( options =>
 {
    options.SlidingExpiration = true;
    options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
 });


おそらく、このスレッドで答えや回避策を見つけることができます。
Ruard van Elburg

@RuardvanElburg返信ありがとうございます。提案されたスレッドから、アプリケーションの開始時にテナントに基づいてすでに登録されているスキームオプションを更新できます。更新できなくなった後。
Madhan kumar D

テナントごとに異なるClientId / ClientSecret設定が必要ですか?または、テナントに基づいて異なるスキームのみを追加しますか?
カークラーキン

@KirkLarkinは、それぞれのテナントのclientId / secretを持つさまざまなスキームです。以下のように、(tenant.hasMicrosoft){authentication.AddMicrosoftAccount(option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan kumar D

これに関する更新はありますか?
Madhan kumar D

回答:



0

認証はDI登録時に構成する必要があるため、認証の登録時に一般にすべての外部ログインプロバイダーをセットアップする必要があります。

そのステップでは、すべてのスキームを追加する必要があります。スキームには固定されたclient-id / secretがあるため、すべてのクライアントをサポートするすべての外部ログインプロバイダー資格情報でIdentityServerをブートストラップする必要があります。スキーム名は一意である必要があります。

例として、テナントAには「A_microsoft」というスキームがあり、テナントBには「B_microsoft」というスキームがあります。

その後、IdentityServerでメソッドを呼び出すときに、これらの認証スキームを参照できます。サインイン、チャレンジ、サインアウトなど。

これには、IdentityServerの完全なテナントセットをブートストラップする必要があることに注意してください。シナリオによっては、テナントが定期的に更新される場合、新しい認証方式を認識するためにIdentityServerを定期的に再起動する必要もあります。


それが問題である場合、IdentityServerの実行時に登録された認証スキームを何らかの方法で増強することができますが、それは簡単ではありません。AspNetCoreに付属する認証ミドルウェアの大規模なカスタム実装が必要になる場合があります。


0

複数の認証プロバイダーのサポートを追加したいですか?このドキュメントでは、構成サービスで複数の認証プロバイダーを追加する方法をすでに指定しています。app.UseXXX自分でパイプラインを構成するためにこれ以上使用する必要はありません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.