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