如何同时使用Core ASP.Net Identity,负载平衡器和Identity.External?

时间:2018-07-17 19:11:45

标签: asp.net-identity asp.net-core-2.0 f5

我在合并多个库和负载平衡环境以产生成功的登录功能时遇到麻烦。

我正在使用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%工作(负载平衡与否)?

0 个答案:

没有答案