当应用程序重新启动时,来自 ADFS 的 ProviderKey 发生变化

ProviderKey from ADFS changes when application restarts

我们已将 ASP.NET 应用程序配置为将多个提供商(Google、Microsoft、LinkedIn 和 ADFS)与 OWIN 一起使用。当 ADFS 以外的任何提供程序进行身份验证时,ExternalLoginInfo 始终具有相同的 ProviderKey。但是,对于 ADFS,当我们重新启动应用程序时(这在我们开发过程中经常发生),我们会得到一个不同的 ProviderKey。如果我们保留应用程序 运行,ProviderKey 将保持不变。这似乎意味着在我们代码的某个地方,我们应该能够配置一些东西,使 ADFS returns 始终为同一用户提供相同的 ProviderKey。

下面是我们配置 ADFS 连接的代码。

WsFederationAuthenticationOptions ws = new WsFederationAuthenticationOptions();
ws.Wtrealm = "https://localhost:44300/";
ws.MetadataAddress = "https://sso.ourcompany.com/federationmetadata/2007-06/federationmetadata.xml";
ws.AuthenticationType = "Our-Federation";
ws.AuthenticationMode = AuthenticationMode.Passive;
app.UseWsFederationAuthentication(ws);

这是一个问题,因为当用户进行身份验证时,我们使用 UserManager 将登录名添加到用户。当然,不断变化的key,无法插入新的Login,报错是因为ApplicationUserLogin中存在重复的UserId和LoginProvider table.

OP接受的方案:

要拥有持久的 providerKey,您需要设置 NameIdentifier 声明以从 adfs 发出。很可能你还没有这样做。 Google for "adfs nameidentifier" 永久性 nameidentifier 声明的可能解决方案。