首页 > 解决方案 > 是否存在 WsFederationAuthenticationOptions WReply 和 CallbackPath 值可能不匹配的情况?

问题描述

使用 ASP.Net OWIN/Katana 使用 WSFederation 设置单点登录时,存在WReplyCallbackPath属性。

在示例项目中,这些在配置时似乎具有非常相似的值Startup.Auth,例如:

new WsFederationAuthenticationOptions() {
   CallbackPath = "/WsFed-Foo", 
   Wreply = "https://example.com/WsFed-Foo"

查看文档,我看到了这个:

CallbackPath 必须设置为匹配或清除,以便动态生成。此字段是可选的。如果未设置,则将从当前请求和 CallbackPath 生成。

我很欣赏这CallbackPath是可选的,但是如果它需要 match WReply,那么当 Katana 被省略时,它为什么会自动计算呢?是否存在与 WReply 不同的情况?

标签: asp.netsingle-sign-onws-federationkatana

解决方案


也许 Tratcher 在 Github ( https://github.com/aspnet/Security/issues/1645 ) 上发布的内容回答了您的问题?

如果确实如此,他对“Wreply 和 CallbackPath #1645 之间的 WsFed 混淆”问题的回复是:

当 WsFed 从 Katana 移植时,它是经过适度更新的翻译,大部分原始设计和选项都被保留了下来。Justin 在测试中注意到,CallbackPath 和 Wreply 之间的修改关系令人困惑,可能会导致我们的客户无限登录循环。Wreply 设置身份提供者返回的地址。CallbackPath 设置中间件监听回复的路径。

在 Katana 中,用户可以选择设置 Wreply,而 CallbackPath 将由此派生。两者都没有默认值,如果未设置,则中间件将读取所有表单发布请求。

在 Core CallbackPath 中,像我们的其他处理程序一样默认为 /signin-wsfed,而 Wreply 没有任何价值。挑战会从 CallbackPath 生成一个 wreply。如果有人在没有更新或清除 CallbackPath 的情况下设置 wreply,就会出现混乱。服务器将回复处理程序未侦听的路径,可能导致无限的身份验证循环或 404。

将 wreply 设置为 WsFed 上的公共选项而不是像其他提供商那样生成重定向的动机是,众所周知,WsFed 身份服务器在匹配值方面非常严格,以至于需要精确的大小写等。从用户生成 url输入可能不足以进行此检查。目前还不清楚有多少客户遇到了这种不匹配,而那些设置为 wreply 的客户,因为他们在样本中看到了它。

不确定这里的最佳前进道路是什么。我们将看到有多少用户遇到它。

我在我认为可能会回答您的第一个问题的内容中添加了 emphasys。关于您的第二个问题,Wreply 和 CallbackPath 不兼容似乎没有任何意义。(从技术上讲,它们总是不同的,因为 CallbackPath - 与 Wreply 不同 - 不是完整的 URL。)


推荐阅读