2016-07-21 19 views
1

Ich verwende Azure B2C mit einem konfigurierten Identitätsanbieter (LinkedIn). Ich habe eine Web-API (b2c Bearer Auth) und eine Web App MVC (b2c Open Id).Azure B2C Dauerhaftes Cookie

Ich versuche eine dauerhafte Anmeldung zu erstellen - dh der Benutzer kann sich einmal alle 90 Tage über das angegebene Gerät + Browser über LinkedIn anmelden.

Der nächstgelegene ich bekommen habe ist, wenn ich IsPersistent = true Code in der Web-App, dass zu aktivieren:

aktualisieren: Aktualisierte Code auf Azure B2C GA basiert. Um das zu erreichen, wo ich mit Vorschau war, habe ich noch ein benutzerdefinierten autorisieren Attribut verwenden, aber der Code wurde aktualisiert:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
      filterContext.HttpContext.GetOwinContext().Authentication.Challenge(
      new AuthenticationProperties() 
      { 
       IsPersistent = true 
      }); 
     base.HandleUnauthorizedRequest(filterContext); 
    } 

Dies ist jedoch für etwa 1 Stunde gültig ist. Vielleicht folgt es der Access & ID-Richtlinie? Ohne Grenzen auf dem Refresh-Token - ich bin mir nicht sicher, warum nur 1 Stunde für "IsPersistent".

Token Session Config in Azure

So führt, dass auf diese Fragen:

  1. ist eine persistente Sitzung (60-90 Tage) etwas, das ich mit Azure B2C (OpenId Connect) erreichen kann?
  2. Wenn ja, irgendwelche Hinweise auf was ich vermisse? Muss ich eine benutzerdefinierte Cookie-Validierung durchführen? Etwas mit Refresh-Token (ich benutze sie für die Web-API, aber nichts Brauchbares in der Web-App).

Alle Gedanken oder Eingaben wären großartig!

Antwort

0

ich konnte eine persistente Sitzung mit B2C erreichen, nachdem Sie folgendermaßen vorgehen:

  1. Individuelle Berechtigungs Attribut

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { filterContext.HttpContext.GetOwinContext().Authentication.Challenge( new AuthenticationProperties() { IsPersistent = true }); base.HandleUnauthorizedRequest(filterContext); }

  2. Verwenden Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory anstelle von BootstrapContext (ging grundsätzlich mit dem Code-Sample vor GA (Änderungshistorie anzeigen) ->https://github.com/AzureADQuickStarts/B2C-WebApp-WebAPI-OpenIDConnect-DotNet). Die ADAL-Bibliothek behandelt das Abrufen eines richtigen Tokens für meinen Code.

  3. Implementiert benutzerdefinierte TokenCache (basierend das EFADAL Beispiel hier: https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-multitenant-openidconnect/blob/master/TodoListWebApp/DAL/EFADALTokenCache.cs)

  4. Changed Startup.Auth.cs:

    return new OpenIdConnectAuthenticationOptions 
    { 
        MetadataAddress = String.Format(aadInstance, tenant, policy), 
        AuthenticationType = policy, 
        UseTokenLifetime = false, 
        ClientId = clientId, 
        RedirectUri = redirectUri, 
        PostLogoutRedirectUri = redirectUri, 
        Notifications = new OpenIdConnectAuthenticationNotifications 
        { 
    
         AuthenticationFailed = OnAuthenticationFailed, 
         AuthorizationCodeReceived = OnAuthorizationCodeReceived, 
        }, 
        Scope = "openid offline_access", 
        ResponseType = "code id_token", 
    
        TokenValidationParameters = new TokenValidationParameters 
        { 
         NameClaimType = "name", 
         SaveSigninToken = true, 
    
        }, 
    }