2015-07-22 6 views
1

Я работаю над SPA с AngularJS и .Net Web API. Я выбираю «Индивидуальные учетные записи» в качестве типа проверки подлинности в приложении. Он создал классы для аутентификации oAuth на основе требований провайдера owin.Проверка подлинности Windows и форм в веб-API

Теперь у меня также есть необходимость проверки подлинности активного каталога Windows. Также потребуется защита на основе ролей, которая будет настраиваться пользователем Admin.

Какие изменения мне нужны в моем текущем коде, созданном мастером для аутентификации пользователей с AD, и если они не найдены там, выполните аутентификацию с текущей реализацией oAuth и, наконец, верните токен претензии клиенту?

Я подумываю о сохранении идентификаторов пользователей моего активного каталога в базе данных приложений при первом входе в систему со своими учетными данными AD. Чтобы я мог назначать им роли

ответ

1

Я предлагаю вам использовать OpenId connectIdentityServer3 (. Net) - он может быть легко интегрирован с AD (вы можете использовать билет Kerberos клиента внутри домена AD, а также можете проверить логин пользователя/password за пределами домена AD), а также множество примеров из коробки, как использовать его в JavaScript. Так что было легко реализовать его в одном из моих приложений AngularJS с бэкэндом .Net.

Кроме того, IdentityServer также имеет кэширование в памяти пользователя во время процесса входа со всеми пользовательскими данными в InMemoryUserService. Таким образом, вам не нужно разрабатывать кэширование данных, связанных с пользователем, оно также находится в автономном режиме в IdentityServer.

Модификации, которые могут помочь в интеграции с AD:

  1. Проверьте Windows Identity перед визуализацией страницы входа, как это:
    string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    И если успех - не показывать страницу входа, выполните его в пути подобно аутентификации внешним источником (Facebook или Twitter).
  2. Чтобы проверить подлинность пользователя вне домена AD с помощью имени и пароля домена, вы можете изменить InMemoryUserService.cs, чтобы проверить это. В качестве примера:

    var user_passhash = GetString(GenerateSaltedHash(GetBytes(password))); 
    
        var query = 
         from u in _users 
         where u.Username == username && u.Password == user_passhash 
         select u; 
    
        var user = query.SingleOrDefault(); 
    
        if (user == null) 
        { 
         var domain = ConfigurationManager.AppSettings["domain"]; 
    
         using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain)) 
         { 
          bool isValid = pc.ValidateCredentials(username, password); 
          if (isValid) 
          { 
           EmployeePoco employee = this.employeeManager.GetEmployee(username); 
    
+0

Спасибо @stepan Ищу в документы для этого, и если он решил мои требования, я отмечающий, что сделано – HSharma

+0

Вы можете. Я уверен, что он решит ваши требования, потому что у меня есть рабочий прототип для этого. В скором времени для полного поддержки AD требуется 2 небольших изменения кода. Я описал их в своем ответе. Пожалуйста, не стесняйтесь задавать любые вопросы. –

Смежные вопросы