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));
}
- Wie korrigiere ich die Inhaber abrufen Token AuthenticationContext-Klasse für die weitere Verwendung mit in meinem Angular-SPA-Kunde?
- Ist es eine gute Idee, den Token als Anspruch innerhalb der OnAuthorizationCodeReceived Handler zu speichern?
- Die Lösung verwendet das Paket Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory. Unterstützt Microsoft.IdentityModel.Clients.ActiveDirectory Azure B2C immer noch nicht?
können Sie die Antwort akzeptieren, wenn es Ihnen geholfen hat. Es wird anderen auch helfen. –
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) –