2017-07-31 4 views
1

OpenID Connectを使用した認証にAzure ADを使用する場合は、認証リクエストにdomain_hintパラメータを含めることができます(whrを使用するのと同様に - とhttp://login.microsoftonline.com?whr=microsoft.comの違いを参照してください)。 )。マルチテナントAzure ADリクエストのドメインヒントを設定するにはどうすればよいですか?

シングルテナントのためのサービスを提供する場合、のようなもの使用してこれを設定するのは簡単です:しかし、私は、ユーザーの電子メールを要求するマルチテナントアプリケーションに取り組んでいます

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions 
    { 
     ClientId = clientId, 
     Authority = authority, 
     PostLogoutRedirectUri = postLogoutRedirectUri, 
     Notifications = new OpenIdConnectAuthenticationNotifications() 
     { 
      RedirectToIdentityProvider = (context) => 
      {               
       context.ProtocolMessage.DomainHint = "mydomain.com"; 
       return Task.FromResult(0); 
      }, 
     } 
    }) 

をし、構成設定によっては、ユーザーがローカルパスワードを使用してログオンできるようにするか、認証のためにAzureにリダイレクトします。私はアプリの起動時にDomainHintを知らない(と、それはユーザーの組織に応じて変化します)ので、の一部としてDomainHintパラメータを渡す方法がある

context.HttpContext.GetOwinContext().Authentication.Challenge(properties, "AzureAd"); 

:これはへの呼び出しによって行われますChallengeメソッドのプロパティやそれと類似している

答えて

1

質問をした直後、私は@vibronetによって投稿された回答と同様のルートを開始しました。解決策が後で来る人は、ここに投稿されます。上記Challenge()への呼び出しで(タイプAuthenticationPropertiesの)propertiesオブジェクトの

一部はDictionary<string, string>オブジェクトである、(運がそれを持っているように)Dictionary呼ばれます。 Challenge()コールする前に、ドメイン・ヒントが、この上に設定されました:

properties.Dictionary["DomainHint"] = domainHint; 

@vibronetが示唆したように、スタートアップでapp.UserOpenIdConnectAuthentication()コールへの変更を通じてパイプラインにアクセスすることが可能です。この呼び出しは次のようになります。

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions 
    { 
     ... 
     Notifications = new OpenIdConnectAuthenticationNotifications 
     { 
      ... 
      RedirectToIdentityProvider = notification => 
      { 
       var dict = notification.OwinContext.Authentication.AuthenticationResponseChallenge.Properties.Dictionary; 
       if (dict.ContainsKey("DomainHint")) 
       { 
        notification.ProtocolMessage.DomainHint = dict["DomainHint"]; 
       } 

       return Task.FromResult(0); 
      } 
     } 
    } 
); 

希望します。

0

確かに!アプリからサインインメッセージビルディングパイプラインにコンテキストを渡す方法については、http://www.cloudidentity.com/blog/2017/03/20/tweak-sign-in-messages-with-the-asp-net-owin-middleware/をご覧ください。ドメインヒント、ログインヒント、または必要な組み合わせを指定するために、この例(バイナリ同意オプションを通知する)を簡単に適応させることができます。

関連する問題