2015-08-25 6 views
14

An mehreren Stellen in einem Standard-ASP.Net MVC Identity 2.0 Owin Implementierung Sie rememberBrowser sehen werden, wie:Was genau erinnert sich Owin an den Browser?

await signInManager.SignInAsync(user, isPersistent: isPersistent, rememberBrowser: false); 

Wenn Sie rememberBrowser auf true gesetzt haben, ich habe bemerkt, dass ich den Browser töten, Töte IIS Express, lösche den Benutzer, bei dem der Browser angemeldet war, starte sogar meinen Rechner neu und der Browser wird weiterhin als eingeloggt betrachtet. Nicht so toll, wenn man bedenkt, dass ein gelöschter Benutzer als autorisiert/eingeloggt behandelt wird, werden alle Arten von Problemen im Code hinter dem [Authorize]-Attribut verursacht, das einen gültigen Benutzer erwarten lässt.

Also, was genau macht rememberBrowser, und gibt es ein Risiko, dass jemand einfach rememberBrowser in ihren Cookies fälschen könnte, um die OWIN-Anmeldung zu umgehen? Es scheint der Punkt von [Authorize] zu garantieren, dass niemand außer eingeloggten Benutzern auf eine bestimmte Controller-Aktion zugreift, und rememberBrowser scheint ein Loch in dieser Garantie zu sein.

Bonus Frage: Gibt es eine Möglichkeit, rememberBrowser zu deaktivieren, so dass selbst wenn ein gefälschter Cookie kam, würde es abgelehnt werden?

Antwort

4

Ich denke, rememberBrowser ist nur in Zwei-Faktor-Authentifizierung relevant. Wenn Sie es also auf "true" setzen, erhält der Browser TwoFactorRememberBrowser Cookies, mit denen der Benutzer die 2FA-Authentifizierung (sofern aktiviert) während des Anmeldevorgangs überspringen kann.

Gibt es eine Möglichkeit, rememberBrowser zu deaktivieren, so dass selbst wenn ein gefälschter Cookie kam, würde es zurückgewiesen werden?

Der von rememberBrowser erstellte Cookie wird in Verbindung mit dem Authentifizierungscookie verwendet. Es erlaubt dem Benutzer nur, 2FA zu überspringen, daher ist es nutzlos, ohne zuerst authentifiziert zu werden.

5

Die Antwort von @Hezye ist korrekt, aber ich werde ein wenig mehr darauf eingehen.

Hier ist der Code, der eine Identität für „rememberBrowser“ CreateTwoFactorRememberBrowserIdentity (https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.Owin/Extensions/AuthenticationManagerExtensions.cs Linie 215) erzeugt:

public static ClaimsIdentity CreateTwoFactorRememberBrowserIdentity(this IAuthenticationManager manager, 
    string userId) 
{ 
    if (manager == null) 
    { 
     throw new ArgumentNullException("manager"); 
    } 
    var rememberBrowserIdentity = new ClaimsIdentity(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 
    rememberBrowserIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userId)); 
    return rememberBrowserIdentity; 
} 

Also diese Identität mit Art „TwoFactorRememberBrowserCookie“ ist und mit nur Anspruch der Benutzer-ID.

Blick auf den Quellcode SignInManager, die diesen Code verwendet: (https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.Owin/SignInManager.cs Linie 106):

if (rememberBrowser) 
{ 
    var rememberBrowserIdentity = AuthenticationManager.CreateTwoFactorRememberBrowserIdentity(ConvertIdToString(user.Id)); 
    AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity, rememberBrowserIdentity); 
} 

Hier IAuthenticationManager wird verwendet, um Anmelde-2 Identitäten: eine für den tatsächlichen Benutzer, eine andere für „rememberBrowser ". Und ich glaube, das wird 2 Cookies erzeugen - ein Benutzerauthentifizierungs-Cookie, ein anderes erinnert sich an den Browser.

In SignInManager bei der Verwendung SignInOrTwoFactor der Code (Zeile 218) überprüft, ob "RememberBrowser" Identität bereits in den Cookies festgelegt ist.

OWIN-Cookies sind durch Verschlüsselung geschützt, die Verschlüsselung stammt von DpapiDataProtector (documentation). Ich bin kein Experte in der Kryptographie, kann also die Stärke der Kryptographie nicht beurteilen. Ich sage nur, dass der Cookie "rememberBrowser" genauso verschlüsselt ist wie der Haupt-Authentifizierungscookie.

In Bezug auf Ihre Übung, bei der Sie Ihren IIS, Computer usw. neu gestartet haben. Haben Sie die Cookies aus dem Browser entfernt? Wenn Sie dies nicht getan haben, behandelt Identity (oder besser OWIN) den Browser als angemeldet, auch wenn der ursprüngliche Benutzerdatensatz aus der Datenbank entfernt wird. Der Benutzer wird jedoch nicht lange angemeldet sein, da Code in der Standardvorlage MVC vorhanden ist, die mit der Datenbank nach dem Benutzerdatensatz sucht und sich abmeldet, wenn der Benutzerdatensatz geändert wurde.

Zum Deaktivieren von "rememberBrowser" - übergeben Sie immer false an dieses Argument. Und der zweite Cookie wird nicht gesetzt.

Verwandte Themen