我是WIF的新手。 现在我在执行单点注销时遇到了问题。
以下是我的问题的背景: 首先,我正在研究两个旧的应用程序A和B,它们在验证用户之后将用户的信息存储在他们自己的会话变量中。 App A和B有自己的本地数据库。现在,我的工作是使用ADFS在两个应用程序之间启用SSO(单点登录)。
现在,我创建了一个新的活动目录来集中存储用户。 当用户尝试通过ADFS登录应用程序A时,应用程序A需要检查声明中的用户名是否存在于本地数据库中。如果存在,用户可以登录App A.否则,App A将拒绝该声明。
以下是技术部分:
我扩展了WSFederationAuthenticationModule并使用OnSessionSecurityTokenCreated方法中的本地数据库检查传入的声明。如果结果匹配,我从本地数据库中检索用户信息并将其存储在会话变量中(这样我可以最小化代码更改)。 App B使用相同的方法。
我对此处的SSO感到满意。但是当我执行单点注销时问题出现了:
当我从App A注销时,我首先在App A中清理自己的会话并调用WSFederationAuthenticationModule.FederatedSignOut方法。但是,App B不会清理自己的会话。我想将调用WSFederationAuthenticationModule中的OnSignedOut。如何在App A退出时清理App B的会话?
这可能非常令人困惑。如果您发现不清楚的地方或需要进一步解释,请留下任何评论。
答案 0 :(得分:0)
WS-Fed中的注销由ADFS实现(它要求带有app /?wa = wsignoutcleanup1.0的gif),而不仅仅是本地。这是通知其他应用程序的唯一方法。 您的应用必须使用signouturl重定向到ADFS。然后,两个应用程序都会收到通知,并可以清理其会话状态(使用gif请求)。