2017-01-29 11 views
3

私はAzure Active Directory(AD)をセットアップしてMVC Webアプリケーションにログインしました。ログインすると、Azureから電子メールIDだけが返されます。キーフィールドとして電子メールIDを使用していくつかの基本プロパティを取得するには、これを拡張する必要があります。追加の詳細を含むADと私のデータベースをマップする。MVCのAzure Active Directoryを使用してログインした後、追加のプロパティを追加してアクセスするには?

私の要件は

  1. ログインにADを使用する必要が下回っています。
  2. ログイン後、Azureは電子メールID(HttpContext.User.Identity.Nameからアクセス可能)を返します。ログイン時にデータベースから追​​加のプロファイル関連プロパティを取得し、拡張アイデンティティを格納する必要があります。
  3. 各アクションの実行時に、データベースから毎回これらの詳細を取得するのではなく、ユーザーがMVCの通常の認証のようにログインした後で、DBから追加のプロパティを取得する必要があります。
  4. 私のデータベースでAzureに追加の詳細を保存するのではなく、代わりにAzureに保存する必要がないため、AD Graph APIは役に立ちません。

答えて

1

OpenIdConnect用にOWINミドルウェアを使用している場合は、ミドルウェアがトークンを検証した後でカスタムデータをカスタムクレームとして追加できます。

だから、のようなもの:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions 
{ 
    // Rest of config left out for brevity 
    Notifications = new OpenIdConnectAuthenticationNotifications 
    { 
    SecurityTokenValidated = async (notification) => 
    { 
     ClaimsIdentity identity = notification.AuthenticationTicket.Identity; 
     //Get the user data any way you want 
     //Add claims 
     identity.AddClaim(new Claim("homeTown", "Somewhere")); 
    } 
    } 
}); 

ClaimsIdentityは、ログインしているユーザーに関する通常のユーザ情報が含まれています。ここに必要なクレームを追加することができ、通常のクレームと同じように保存されます。これらの申し立てにアクセスできます。あなたのコントローラーでUserプロパティを使用するか、他の場合はClaimsPrincipal.Currentを使用します。

ここでの主な利点は、ユーザーがサインインするときに一度だけデータを取得することです。リクエストごとに取得する必要はありません。

関連する問題