2016-04-19 6 views
1

Ich erstelle eine Anwendung mit ASP.NET MVC und WebAPI mit dieser Vorlage: Azure AD B2C WebApp/WepAPI. Ich habe meine Azure B2C AD über die web.config-Dateien konfiguriert und wenn ich auf "Anmelden" klicke, sehe ich meine Identitätsanbieter. Login funktioniert soweit (ich sehe meinen Benutzernamen in der oberen rechten Ecke) und ich kann die "To-Do List" -Action ausführen.Azure B2C - Token konnte nicht automatisch erfasst werden

Aber sobald ich den Debugger stoppe und die Anwendung durch Drücken von F5 neu starte, erhalte ich einen Fehler, wenn ich wieder auf "To-Do List" -Action klicke.

Fehler beim automatischen Abrufen des Tokens. Call-Methode AcquireToken Text ->Code

Dies geschieht, dass der Benutzer noch authentifiziert, aber die NaiveSessionCache ist leer, nachdem die Anwendungen neu starten. Eine mögliche Lösung wäre, das Token im OnAuthorizationCodeReceived Handler zu speichern, aber ich sehe ein wenig seltsam für mich

private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification notification) 
    { 
     string userObjectID = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
     string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant, string.Empty, string.Empty); 
     ClientCredential credential = new ClientCredential(clientId, clientSecret); 

     string mostRecentPolicy = notification.AuthenticationTicket.Identity.FindFirst(Startup.AcrClaimType).Value; 
     AuthenticationContext authContext = new AuthenticationContext(authority); 

     AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(notification.Code, new Uri(redirectUri), credential, new string[] { clientId }, mostRecentPolicy); 

     // Store token in ClaimsIdentity 
     notification.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim("Token", result.Token)); 
    } 

Antwort

2

Ihr Cache ist leer, weil er nirgends gespeichert wird. Schauen Sie sich http://www.cloudidentity.com/blog/2014/07/09/the-new-token-cache-in-adal-v2/ an. Suchen Sie nach EFADALTokenCache, und Sie werden die Implementierung finden, die Ihnen helfen wird, den Cache für einige Speicher persistent zu machen.

Azure B2C wird nur über die neue Bibliothek MSAL unterstützt, die unter https://www.nuget.org/packages/Microsoft.Identity.Client verfügbar ist. Diese Bibliothek befindet sich noch in der Vorschau.

+0

können Sie die Antwort akzeptieren, wenn es Ihnen geholfen hat. Es wird anderen auch helfen. –

+0

NaiveSessionCache behebt das Token im Sitzungszustand, das während der gesamten Benutzersitzung verfügbar sein soll. Es wird in Beispielen verwendet. Reicht es nicht? Warum speichern Sie lieber in der DB als in Session? Ich habe eine verwandte Frage [Ist es in Ordnung, NaiveSessionCache von Azure-Samples Azure Active Directory OpenId Connect zu verwenden] (// stackoverflow.com/q/41864737) –