【发布时间】:2012-11-03 22:59:19
【问题描述】:
根据文档,这两个模块都将用于创建 IClaimsPrincipal 的实例。我不明白为什么 WIF 费心使用 2 个 HttpModules 而不是一个?抱歉,我是 WIF 的新手
【问题讨论】:
根据文档,这两个模块都将用于创建 IClaimsPrincipal 的实例。我不明白为什么 WIF 费心使用 2 个 HttpModules 而不是一个?抱歉,我是 WIF 的新手
【问题讨论】:
最大的区别在于 WSFederationAuthenticationModule 拦截请求并将用户重定向到 STS 进行身份验证,而 SessionAuthenticationModule 使用 WIF-token cookie 授权用户进行后续请求。
SessionAuthenticationModule 首先在管道中触发,因此如果您已经拥有会话 cookie(即您已经通过身份验证),会话模块将授予您访问权限。
MSDN documentation 很好地描述了这一点。
【讨论】:
您不需要在管道中同时拥有IClaimsPrincipal。你需要后者,SessionAuthenticationModule。它负责将 WIF cookie 转换为主体对象(类似于 FormsAuthenticationModule 对表单 cookie 所做的事情)。
前者,WSFederationAuthenticationModule 仅负责从身份提供程序到您的应用程序的初始 SAML 帖子 - 模块使用该帖子并发出 WIF cookie。或者,您可以使用登录表单上的wif:FederatedPassiveSignIn 控件来完成。
当我编写支持 WIF 的应用程序时,我通常只有 SAM 模块,并使用登录控件来发出 cookie。
【讨论】: