我正在使用此模板构建一个带有 ASP.NET MVC 和 WebAPI 的应用程序:Azure AD B2C WebApp / WepAPI。我已经通过 web.config 文件配置了我的 Azure B2C AD,当我单击“登录”时,我看到了我的身份提供者。到目前为止登录工作(我在右上角看到我的用户名)并且我能够执行“待办事项列表”-Action。
但是,当我停止调试器并按 F5 重新启动应用程序时,当我再次单击“待办事项列表”-Action 时出现错误。
静默获取令牌失败。调用方法 AcquireToken 文本-->代码
发生这种情况是因为用户仍然经过身份验证,但应用程序重新启动后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));
}
- 如何使用 AuthenticationContext-class 正确检索不记名令牌,以便在我的 Angular-SPA 客户端中进一步使用?
- 将令牌作为声明存储在OnAuthorizationCodeReceived Handler中是个好主意吗?
- 该解决方案使用Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory包。Microsoft.IdentityModel.Clients.ActiveDirectory仍然不支持 Azure B2C 吗?