0

1 つの Web アプリケーションが複数のドメインにサービスを提供するソリューションを作成しようとしています。ドメインごとに、外部プロバイダーのアプリ ID とシークレットを使用して、独自のプロバイダーを構成したいと考えています。Cookie ドメインプロバイダー情報が必要です。現在のドメイン名に基づいてデータベースから読み取られるため、たとえば次のようになります。

switch (currentDomainName)
{
case "web1.com": load cookie domain and providers information for web1.com ...
case "web2.com": load cookie domain and providers information for web2.com ...
...
}

私は2つの大きな問題に直面しています:

  1. Owin スタートアップの ConfigureAuth() で使用できる HttpContext がなく、スタートアップの早い段階でどのドメイン名が使用されているかを判断する方法がわかりません...
  2. Startup は Web アプリケーションごとに 1 回だけ実行されることを理解しています。たとえば、web1.com に初めてアクセスした後、web1.com によって既に設定されていると、configureAuth() は web2.com に対して再度実行されません。

いくつかの Owin メソッドをオーバーライドして非静的にすることができるかどうか疑問に思っています... または、これを別の方法で実装する方法を見つけることができます (しかし、私はまだ Owin を使用するのが好きです)。

どこから始めればよいですか?

4

1 に答える 1

0

リクエスト URL を取得し、データベースを検索してドメイン関連の顧客を確認できます。このドメインの ID プロバイダーを一覧表示するテーブルが存在する可能性があります

TenantDomains
*************
TenantId      URL ......
tenant1       https://tenant1.company.com
tenant2       https://tenant2.company.com

IdProviders
***********
TenantId       ProviderIds       ......
tenant1        Custom, Social
tenant2        Social

ここでは、読みやすくするために識別子の代わりに名前を使用しています。ただし、アプローチは同じままです。

上記のすべてのルックアップをミドルウェアで実行し、値を使用して、Environment以前に行ったデータまたは決定に基づいてパイプラインを設定できます。

例:

OWIN コンテキストから着信要求にアクセスし、owin コンテキストの要求自体から HttpRequest で行うすべての操作を実行できます。

        app.MapWhen(req => req.Request.Headers.ContainsKey("Authorization"), apiAuth =>
        {
            // do anything that matches this request
            apiAuth.UseBearerAuthentication(new BearerAuthenticationOptions());

        });

HTH

于 2016-07-06T11:27:10.723 に答える