重启后未找到帐户,并点击状态码0:没有帐户或登录提示传递给AcquireTokenSilent调用



我有一个。net core 3.1 mvc web应用程序,使用azure活动目录进行身份验证用户,以及实现用户个人信息,如他的电话,他的工作,并通过使用MSAL实现这一点,一切都很好,直到我重新启动web应用程序,一旦我重新启动web应用程序(没有注销),似乎索赔仍然被应用程序找到,但我得到这个错误{"没有帐户或登录提示被传递给AcquireTokenSilent调用。"}

如果用户退出,问题解决。这发生在本地主机上,如果应用程序与Azure一起发布并且我重新启动应用程序服务也会发生。

services.AddOptions(); JwtSecurityTokenHandler.DefaultMapInboundClaims = false; IdentityModelEventSource.ShowPII = true;
services.AddMicrosoftIdentityWebAppAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi(new string[] { Constants.ScopeUserRead }) 
.AddMicrosoftGraph(Configuration.GetSection("GraphBeta")) 
.AddDistributedTokenCaches();
services.AddDistributedMemoryCache();
services.AddGraphService(Configuration);
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{

options.TokenValidationParameters.RoleClaimType = "roles";
//options.TokenValidationParameters.RoleClaimType = "groups";
options.TokenValidationParameters.NameClaimType = "name";
//added to save token
// options.SaveTokens = true;
});
services.AddControllersWithViews();
services.AddTokenAcquisition();
services.AddHttpClient();
services.AddScoped<IIncidentRepository, IncidentRepository>();
services.AddSession();
Incident incident = new Incident();
// fetch and set user msid using GraphServiceClient
if (HttpContext.User.Identity.IsAuthenticated)
{
ViewData["User"] = HttpContext.User;
var me = await _graphServiceClient.Me.Request().GetAsync(); // this line is throwing error
ViewData["UserId"] = me.OnPremisesSamAccountName;
HttpContext.Session.SetString("MSID", ViewData["UserId"].ToString());
//var accessToken = await HttpContext.GetTokenAsync("access_token");
//string idToken = await HttpContext.GetTokenAsync("id_token");
}
return View(incident);
}
catch (Exception ex)
{
_logger.ForContext("ClassName", this.GetType().Name)
.ForContext("MethodName", ControllerContext.ActionDescriptor.ActionName).Error("Error is create incident", ex.StackTrace);
}

AddDistributedTokenCaches()依赖于不持久化数据的AddDistributedMemoryCache()。这就是重启后数据丢失的原因。将后者替换为保存其数据的缓存,例如分布式SQL Server缓存。

相关内容

  • 没有找到相关文章

最新更新