Azure B2C - 无法静默获取令牌

Azure B2C - Failed to acquire token silently

我正在使用 ASP.NET MVC 和 WebAPI 使用此模板构建应用程序:Azure AD B2C WebApp / WepAPI。我已经通过 web.config 文件配置了我的 Azure B2C AD,当我单击 "Sign in" 时,我看到了我的身份提供者。到目前为止登录有效(我在右上角看到我的用户名)并且我能够执行 "To-Do List"-Action。

但是当我停止调试器并按 F5 重新启动应用程序时,当我再次单击 "To-Do List"-Action 时出现错误。

静默获取令牌失败。调用方法AcquireToken text --> Code

发生这种情况,导致用户仍然通过身份验证,但 NaiveSessionCache 在应用程序重新启动后为空。一个可能的解决方案是,将令牌存储在 OnAuthorizationCodeReceived 处理程序中,但我看起来有点奇怪

    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));
    }

你的缓存是空的,因为它没有被保存在任何地方。查看 http://www.cloudidentity.com/blog/2014/07/09/the-new-token-cache-in-adal-v2/。搜索 EFADALTokenCache,您将找到可帮助您将缓存持久保存到某个存储的实现。

Azure B2C 将仅通过 https://www.nuget.org/packages/Microsoft.Identity.Client 上可用的名为 MSAL 的新库提供支持。此库仍在预览中。