ASP.NET-Web-API mit OAuth2 - "Remember this browser" bei Verwendung der Zwei-Faktor-Authentifizierung

8

In der Standardvorlage für ASP.NET MVC 5 besteht die Möglichkeit, bei der Anmeldung mit der Zwei-Faktor-Authentifizierung "Diesen Browser merken" auszuwählen.

In ASP.NET MVC müssen Sie app.UseTwoFactorRememberBrowserCookie(); in Startup.Auth.cs konfigurieren und dann SignInManager.TwoFactorSignInAsync() mit isPersistent: true

verwenden

Ich möchte dasselbe erreichen, aber die ASP.NET Web API mit OAuth2 Bearer Token verwenden.

i.e. Ich möchte, dass sich der Benutzer abmelden kann (oder automatisch abgemeldet wird). Aber das nächste Mal, wenn man sich mit demselben Browser anmeldet, muss der Benutzer nur das Passwort angeben, nicht zwei-Faktor-Authentifizierung.

Wie würde ich solch ein Verhalten mit OAuth2 Bearer Token implementieren?

    
Svein Fidjestøl 02.02.2017, 13:21
quelle

4 Antworten

3

Nun, meiner Meinung nach ist es das Problem der Client-Seite und ich möchte Ihre Frage in "Was ist der beste Ort, um Authentifizierungs-Token auf der Client-Seite zu speichern?" umformulieren.

Sie haben ein paar Optionen:

  1. HTML5-Webspeicher (localStorage oder sessionStorage)
  2. Cookies

Mit Option 1, wenn der Tab / Browser geschlossen ist, ist das Token noch aktiv und das nächste Mal, wenn Sie automatisch angemeldet sind.

%Vor%

Mit Option zwei können Sie das Token in einem Cookie speichern und es abrufen, wenn Sie eine Anfrage an den Server senden.

Natürlich haben beide Optionen Vor- und Nachteile, für weitere Informationen empfehle ich Ihnen, Wo speichern Sie Ihre JWTs - Cookies vs HTML5 Web Storage

    
Abbas Amiri 02.02.2017 20:42
quelle
1

Ich schlage vor, dass Sie mehr Kontrolle über die Authentifizierungslösung benötigen und Ihren eigenen LoginController mit einer anderen Login-Implementierung mit einem von Ihnen erstellten Cookie "remember this browser" nach einer erfolgreichen OAuth2 Bearer Tokens-Anmeldung für die ASP.NET-Web-API implementieren müssen existiert im Browser des Benutzers. Genau wie ASP.NET MVC app.UseTwoFactorRememberBrowserCookie () tut.

Wenn der Benutzer sich mit zwei Faktoren anmeldet, sich abmeldet, einen Cookie in den Browser einfügt, "erinnere mich an 30 Tage" Cookie, beim nächsten Login, checkst du nach dem nicht abgelaufenen Cookie und erlaubst dir nur mit Passwort zu einer anderen Anmeldemethode als OAuth2 Bearer Tokens.

Sie haben die Kontrolle und benötigen keine OAuth2-Bearer-Token für die ASP.NET-Web-API, um Ihre gesamte Login-Lösung zu lösen.

    
Brian Ogden 24.02.2017 05:20
quelle
0

Ich bin mir ziemlich sicher, dass dies die Kontrolle über den Identitätsanbieter hat, mit dem Sie den Benutzer authentifizieren. z.B. Wenn Sie einen der Microsoft-Dienste verwenden, wird bei der ersten Anmeldung im Browser nach einer zweistufigen Authentifizierung gefragt. Anschließend wird der Browser / das Gerät für eine nachfolgende Anmeldung "erinnert" und keine Zwei-Faktor-Authentifizierung eingeleitet. OAuth2 ist nur ein Autorisierungsprozess und kein Authentifizierungsprozess. Daher ist es unwahrscheinlich, dass Sie angeben können, dass der Identitätsanbieter keine Zwei-Faktor-Authentifizierung initiiert.

    
user1828125 24.02.2017 05:06
quelle
0

Dies sind die Dinge, die Sie tun können, um dieses Verhalten zu erreichen.

1) Klicken Sie während der Anmeldung auf eine Ajax-Postanfrage an http: // {yoursite} / token. Bei erfolgreicher Anmeldung antwortet es zurück mit Bearer-Token und einigen Identitätsinformationen. Überprüfen Sie das Flag "twofactorrequired" im lokalen Speicher und identifizieren Sie, ob die Authentifizierung mit zwei Faktoren erforderlich ist oder nicht. Wenn dieses Flag nicht verfügbar ist, setzen Sie das Flag (first login) auf true. Wenn dieser Flagwert falsch ist, bedeutet dies, dass die Zwei-Faktor-Authentifizierung abgeschlossen ist. Man sollte dieses Flag basierend auf dem an den Benutzer gesendeten E-Mail-Link oder dem Telefoncode setzen.

%Vor%

HINWEIS: Diese Methode ist nicht vollständig sicher. Man kann dieses Flag einfach mit den Entwicklertools (F12) setzen. Um dies sicherer zu machen, muss dieses Flag in db zusammen mit der MAC-Adresse oder ähnlichem gehalten werden.

    
Raj Karri 25.02.2017 16:00
quelle