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