2017-02-02 9 views
8

В шаблоне по умолчанию для ASP.NET MVC 5 есть возможность выбрать «Запомнить этот браузер» при входе в систему с использованием двухфакторной аутентификации ,ASP.NET Web API с OAuth2 - «Помните этот браузер» при использовании двухфакторной аутентификации

В ASP.NET MVC, это включает в себя настройку app.UseTwoFactorRememberBrowserCookie(); в Startup.Auth.cs, а затем с помощью SignInManager.TwoFactorSignInAsync() с isPersistent: true

Я хотел бы сделать то же, но с использованием ASP.NET Web API с oauth2 Несущих токенов.

I.e. Я хотел бы, чтобы пользователь мог выйти из системы (или автоматически выйти из системы). Но в следующий раз при входе в систему с использованием одного и того же браузера пользователь должен предоставить пароль, а не двухфакторную аутентификацию.

Как я могу реализовать такое поведение с использованием токенов-носителей OAuth2?

+0

Почему у вас есть два автофайла, если вы не хотите его использовать? – BillRuhl

+0

Я хочу, чтобы пользователям приходилось использовать два фактора auth один раз для каждого устройства (на практике, один раз для браузера). Это подход, используемый многими службами - учетной записью Microsoft, Dropbox и т. Д. –

+1

В таблице пользователей вам понадобится поле бит, 0 или 1, которое обозначает пользователя, успешно использующего два фактора auth. Затем при регистрации проверьте это значение. Если они успешно использовали два фактора auth, тогда пусть они вставляются, если нет, а затем отправляют им код auth на свое устройство. – BillRuhl

ответ

3

Ну, на мой взгляд, это проблема с клиентской стороной, и я хотел бы перефразировать ваш вопрос в «Какое лучшее место для хранения токенов аутентификации на стороне клиента?»

У вас есть несколько вариантов:

  1. HTML5 Web Storage (LocalStorage или sessionStorage)
  2. Cookies

С первым вариантом, когда вкладка/браузер закрыт маркер еще живым и в следующий раз, когда вы автоматически вошли в систему.

$window.sessionStorage.setItem('userInfo-token', 'tokenData'); 

С опцией tw o вы можете сохранить токен в файл cookie и получить его, когда будете отправлять запрос на сервер.

Конечно оба варианта имеют свои плюсы и минусы, для получения дополнительной информации я рекомендую вам чтение Where to Store your JWTs – Cookies vs HTML5 Web Storage

+0

Спасибо, но это не совсем то, что я ищу. Я хотел бы, чтобы пользователь мог выйти из системы (или автоматически выйти из системы). Но в следующий раз при входе в систему с использованием одного и того же браузера пользователь должен предоставить пароль, а не двухфакторную аутентификацию. –

0

Я довольно уверен, что это контролирует поставщика идентичности, который вы используете для аутентификации пользователя. например если вы используете какую-либо из служб Microsoft, первое время входа в браузер запрашивает двухфакторную аутентификацию, а затем «запоминает» браузер/устройство для любого последующего входа в систему и не использует двухфакторную аутентификацию. OAuth2 - это только процесс авторизации, а не процесс аутентификации, поэтому маловероятно, что вы можете указать поставщика удостоверений, чтобы не инициировать двухфакторную аутентификацию.

1

Я предлагаю вам больше контролировать решение для проверки подлинности и реализовать свой собственный LoginController с другой версией входа в систему с помощью куки-файла «помните этот браузер», который вы создали после успешного веб-интерфейса API-интерфейса ASP.NET OAuth2 логин существует в браузере пользователей. Как и ASP.NET MVC app.UseTwoFactorRememberBrowserCookie().

Если пользователь входит в систему с двумя факторами, то выходит из системы, вы помещаете куки-файлы в этот браузер, «помните меня за 30 дней» cookie, в следующий раз, когда они заходят в систему, вы проверяете неистекший файл cookie и разрешаете логин с паролем только для другого метода входа, отличного от токенов-маркеров OAuth2.

Вы управляете и не нуждаетесь в указателях маркера OAuth2 для веб-интерфейса ASP.NET, чтобы решить все решение для входа в систему.

0

Это то, что вы можете сделать для достижения такого поведения.

1) Во время входа в систему нажмите кнопку отправить запрос на отправку ajax на http: // {yoursite}/token. При успешном входе в систему он вернет токен-носитель и некоторую идентификационную информацию. Проверьте флаг «twofactorrequired» в локальном хранилище и укажите необходимость двухфакторной аутентификации или нет. Если этот флаг недоступен, установите флаг (первый вход) в значение true. Если значение этого флага является ложным, это означает, что завершена двухфакторная аутентификация. Необходимо установить этот флаг на основе ссылки электронной почты, отправленной пользователю или коду на телефон.

$.ajax({ 
     type: "POST", 
     url: "/Token", 
     data: JSON.stringify(model), 
     contentType: 'application/json', 
     success: function (response) { 
      var json = JSON.parse(response); 
      localStorage.setItem("accesstoken", json["access_token"]); 

      if (isTwoFactorRequired() != false) 
      { 
      localStorage.setItem("twofactorrequired", true); 
      } 

      window.location.href = "/Home/Index";   
     }, 
     failure: function (errMsg) { 
     } 
    }); 


function isTwoFactorRequired() { 
if (localStorage.getItem("twofactorrequired") == false) {  
return false; 
} 
else { 
return true; 
} 

Примечание: Этот метод не является безопасным полностью. Этот флаг можно легко установить с помощью инструментов разработчика (F12). Чтобы сделать это более безопасным, необходимо сохранить этот флаг в db вместе с MAC-адресом или что-то в этом роде.

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

  • Нет связанных вопросов^_^