我试图在我的应用程序中使用Sustainsys.Saml2.AspNetCore2中间件。我已经成功登录并首先注册了我的电子邮件地址,然后注销并尝试再次登录。我面临的问题是NameID用作ASP.NET Identity中的ProviderKey,并且要求我再次提供电子邮件,就像我第一次登录一样。在调试为什么会发生这种情况时,我看到了对以下内容的调用:
signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: true, bypassTwoFactor: true);
返回{Failed}。另外,我注意到ProviderKey与AspNetUserLogins表中的ProviderKey不同。如何将相同外部身份的第二个登录名与第一次登录中创建的内部身份联系起来?
答案 0 :(得分:0)
如果NameID是瞬时的,则不能将其用作Asp.Net Identity中的提供者密钥。最简单的方法当然是与Idp对话,然后要求他们切换到持久的NameID。
如果这不可能,请检查是否有任何固定的属性并且适合用作键。然后,您可以覆盖AcsCommandResultCreated
通知。在其中,删除现有的NameIdentifier声明,然后从要使用的属性中创建一个新的声明。