【问题标题】:ProviderKey from ADFS changes when application restarts应用程序重新启动时,来自 ADFS 的 ProviderKey 发生变化
【发布时间】:2016-06-18 15:11:01
【问题描述】:

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

【问题讨论】:

  • 要拥有持久的 providerKey,您需要设置从 adfs 发出的 NameIdentifier 声明。很可能你还没有这样做。谷歌为“adfs nameidentifier”寻找持久性 nameidentifier 声明的可能解决方案。我将此作为评论而不是答案发布,因为我确信这可以解决您的问题(您尚未详细说明是否设置了 NameIdentifier)。
  • 我认为我们没有设置 NameIdentifier,但会确认并报告。谢谢!
  • @WiktorZychla 看来名称 ID 是原因。我们将其设置为瞬态,因此每次会话都会更改。如果您将其发布为答案,我会将其标记为正确。谢谢!
  • 很高兴听到这个消息,谢谢。

标签: asp.net owin adfs ws-federation


【解决方案1】:

OP 接受的解决方案:

要拥有持久的 providerKey,您需要设置从 adfs 发出的 NameIdentifier 声明。很可能你还没有这样做。谷歌为“adfs nameidentifier”寻找持久性 nameidentifier 声明的可能解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多