2017-01-29 16 views
3

Я установил Azure Active Directory (AD) для входа в веб-приложение MVC. После входа в систему от Azure возвращается только идентификатор электронной почты. Мне нужно расширить это, чтобы получить некоторые основные свойства, используя Email ID в качестве ключевого поля; для отображения AD и моей базы данных, которая содержит дополнительные сведения.Как добавить и получить доступ к дополнительным свойствам после входа в систему с использованием Azure Active Directory в MVC?

Мои требования ниже

  1. Необходимость использования AD для входа в систему.
  2. После входа в Azure будет возвращен идентификатор электронной почты (к которому можно получить доступ из HttpContext.User.Identity.Name) Мне нужно получить некоторые дополнительные свойства, связанные с профилем, из моей базы данных во время входа в систему и сохранить в расширенном удостоверении личности.
  3. Я не хочу получать эти дополнительные данные каждый раз из базы данных для каждого действия, вместо этого мне нужно получить эти дополнительные свойства из моего БД после входа пользователя в систему, как обычная проверка подлинности MVC.
  4. AD Graph API не полезен, потому что я не хочу хранить дополнительные данные в Azure, но он будет доступен в моей базе данных.

ответ

1

Если вы используете промежуточное ПО OWIN для OpenIdConnect, вы можете добавить свои пользовательские данные в качестве пользовательских претензий после того, как промежуточное программное обеспечение проверило токен.

Так что-то вроде:

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 в другом месте.

Главным преимуществом здесь является то, что вы только извлекаете данные один раз, когда пользователь подписывается, вам не нужно получать их по каждому запросу.