0

从 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 返回的值计算为经过身份验证。

4

2 回答 2

1

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

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

于 2012-12-20T06:28:52.007 回答
0

与其修改 WSFederatedAuthenticationModule 对 cookie 的默认处理,我建议使用另一种设置:

  1. 创建并托管您自己的基于身份验证身份提供者 STS 的表单。有一些不错的选项可以帮助进行设置。
  2. 在 ACS 中配置您的新 IP STS
  3. 使用默认的 ACS 登录页面(主页领域发现页面)或自定义您自己的.

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

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

于 2012-12-18T20:27:30.210 回答