【问题标题】:Parsing 'wresult' value without WSFederationAuthenticationModule在没有 WSFederationAuthenticationModule 的情况下解析“wresult”值
【发布时间】:2012-12-20 14:28:52
【问题描述】:

从 Azure ACS 返回时,我在 FormCollection 中检索联合身份验证结果。包含我需要的信息的值位于一个名为“wresult”的加密值中。我在解密此值以将其用于进一步身份验证时遇到问题。

我不想使用 WSFederationAuthenticationModule,因为我没有设置授权 cookie。使用该模块时,它会自动将 auth-cookies 设置为 Federated-Authenticationtype。

我想检索 wresult 中包含的声明,然后设置我自己的安全令牌(无论是 JWT、SAML 2.0 还是其他)。

到目前为止,我发现的唯一可能的解决方法是使用 FAModule,然后立即删除会话令牌 cookie。但这会导致 auth-cookie 在响应中设置两次,并立即取消设置。

我最终想要达到的目标如下: 提供使用表单站点进行身份验证或使用 Azure ACS 中的任何身份提供程序进行身份验证的可能性。使用表单身份验证,我可以立即比较用户名和密码,并将安全令牌设置为我希望它拥有的任何声明。但是在使用 Azure ACS 时,我想首先将检索名称标识符与我的数据库中保存的值进行比较,然后设置我的自定义安全令牌,而不是 WS 联合安全令牌。或者,如果 nameidentifier 未知,我想重定向到表单页面,用户可以使用他的凭据验证这个 nameidentifier。我不希望将 azure ACS 返回的值计算为经过身份验证。

【问题讨论】:

    标签: c# wif ws-federation azure-acs


    【解决方案1】:

    您不必注册 FAM - 但您仍然可以使用它的辅助方法(例如 GetSignInResponseMessage())来解析来自 ACS 的登录响应消息。

    这使您无需使用 WIF cookie 系统即可访问协议详细信息和返回的安全令牌。

    【讨论】:

      【解决方案2】:

      我建议替代设置,而不是修改 WSFederatedAuthenticationModule 对 cookie 的默认处理:

      1. 创建和托管您自己的基于身份验证身份提供程序 STS 的表单。有一些nice options 可以帮助进行设置。
      2. 在 ACS 中配置您的新 IP STS
      3. 使用默认的 ACS 登录页面(主域发现页面)或customize your own

      现在您的用户将被要求选择他们想要通过哪个身份提供者进行身份验证。如果他们选择您的,则在输入用户名/密码后,您的 IP 将向 ACS 发送一个名称标识符,然后 ACS 将其发送到您的依赖方网站。如果您将 google 添加为身份提供者,情况也是如此。好处是您的 RP 不需要根据用户登录的 IP 采取不同的行为,但如果您想根据 IP 自定义某些行为,则可以在 ACS 颁发的令牌中获得该信息。

      此外,如果您想使用 JWT 令牌而不是 SAML,您可以将 ACS 配置为从 ACS 门户中的依赖方页面发布它们(尽管这被标记为 beta 功能)。

      【讨论】:

      • 我不明白这对我有什么帮助。直接在第一页上,我希望该选项已经使用我的数据库密码/用户名进行身份验证,而不必从我的 ACS 中选择 IP。以及如何将我的自定义声明立即注入其他 STS,例如 Live 或 Google?
      • 查看第 3 步。您的登录页面不需要是 IP 选择器,您可以随意设置,例如包括数据库用户名/密码登录表单。此外,您不会立即将自定义声明注入来自其他 STS 的令牌,但您会在 ACS 中配置规则以将声明放入您的站点从 ACS 获取的令牌中。 msdn.microsoft.com/en-us/library/gg185955.aspx
      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 2021-12-19
      • 2020-03-03
      • 1970-01-01
      • 2021-04-19
      • 2023-03-04
      • 2012-03-27
      • 1970-01-01
      相关资源
      最近更新 更多