我在合并多个库和负载平衡环境以产生成功的登录功能时遇到麻烦。
我正在使用Microsoft.AspNetCore.Identity.EntityFramework
2.0.3和自定义SAML实现,该实现使用Microsoft.AspNetCore.Identity.SignInManager.GetExternalLoginInfoAsync()
获取登录信息。在本地,即使在IIS中,它们也可以正常工作。但是,在将其部署到的服务器上,它不起作用。 GetExternalLoginInfoAsync()
认证失败,从而迫使身份系统重定向到登录页面,并且不允许进行用户认证。但是,它在负载平衡的环境中间歇工作。大概有1%的时间可以工作,主要是在重新部署代码之后。然后又回到无法正常工作。
这是将其部署到负载平衡服务器后在日志中看到的内容:
AuthenticationScheme:未验证“ Identity.External”。
这是我的通用身份启动公司:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
BTW,一种标准的ASP.Net Identity实现在这种负载平衡的环境中可以正常工作。但不是使用GetExternalLoginInfoAsync()
的实现。
我已经在SO和MS的站点上查看过,但是找不到解决这种情况的任何东西。
我使用的代码基于this project。这是它尝试调用有问题的方法的地方:
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
_logger.LogWarning("Null login info");
return RedirectToPage("./Login");
}
在本地,这不会返回null,并且info
用于登录到ASP.Net Identity。在服务器上,它返回null。
当GetExternalLoginInfoAsync()
在本地运行正常时,如何使select
id
,names['1033']['short'] as srt_nm
from id;
在服务器上100%工作(负载平衡与否)?