我们已将ASP.NET应用程序配置为使用OWIN使用多个提供程序(Google,Microsoft,LinkedIn和ADFS)。当ADFS以外的任何提供程序进行身份验证时,ExternalLoginInfo始终具有相同的ProviderKey。但是,使用ADFS,当我们重新启动应用程序时,我们在开发过程中经常会发生这种情况,我们会得到一个不同的ProviderKey。如果我们让应用程序继续运行,那么ProviderKey将保持不变。这似乎意味着在我们的代码中的某个地方,我们应该能够配置一些能够使它同时为同一个用户返回相同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将登录添加到用户。当然,使用不断更改的密钥,它无法插入新的登录并出现错误,因为ApplicationUserLogin表中存在重复的UserId和LoginProvider。
答案 0 :(得分:1)
OP接受的解决方案:
要拥有持久化的providerKey,您需要设置从adfs发出的NameIdentifier声明。很可能你还没有这样做过。 Google为“adfs nameidentifier”提供持久性nameidentifier声明的可能解决方案。