2017-08-25 54 views
0

我使用AD FS中的WS Federation选项用于用户登录到我们的网站(WebsiteA)。现在我们需要为另一个供应商做一个SSO ...可以说WebsiteBAD FS刷新令牌之前IdpInitiatedLogin SSO

要做SSO我只需通过我的AD FS启动IdpInitiatedLogin并且用户登录到WebsiteB。

用户通常在WebsiteA中的每个帐户在WebsiteB中有2个帐户。要登录WebsiteB中的帐户,我们在IdpInitiatedLogin之前从WebsiteA中设置LDS中的一个属性。这为WebsiteB设置了索赔,因此它知道使用哪个帐户。

问题是,当我们在LDS中的相同属性中设置不同的值时,它不会刷新SAML的索赔信息,如网站B所示。

有什么办法可以在IdpInitiatedLogin过程之前刷新SAML /令牌或声明信息,以便用户登录到正确的帐户?

+0

我没有太多的练习,所以我只是抛出可能不太好的想法,因此这只是一条评论......但我相信SAML令牌基本上都是饼干。如果你可以清除cookie,那将有效地刷新令牌。但大多数情况下,我认为你想做的事情不被SAML很好的支持。我知道这一点,我在哪里管理一个小型大学的Google Apps域,并且让一名工作人员同时登录两个Google SSO帐户是一种痛苦。我通常会问需要这样做的人使用两种不同的浏览器。 –

+0

感谢Joel,当我在Cookies中看到Infact时,没有任何Cookies属于SAML。不过,我明白你的观点,但即使刷新也不行。完全失去了这个特定的领域! –

回答

0

感谢Joel Coehoorn,nzpcmad,关注我正面临的问题。 为了理解这个话题做了大量的Google搜索之后,我还没有找到很多指向它的参考。

按我的理解,这个问题是属性的高速缓存的,一旦你被登录。

要解决我用问题自定义属性商店(使用SQL数据库)。 每次启动IDPInitiatedSignIn时,都会对数据库进行查询。或者说每次发送该声明(使用自定义声明)。

对于像我这样的其他开发者,他们可能面临同样的问题,我在这里发布我的解决方案。希望它有助于:)

1

索赔不是动态的。

你必须注销/登录刷新它们。

您可以通过编程做到这一点 - 是指https://social.technet.microsoft.com/wiki/contents/articles/1439.ad-fs-how-to-invoke-a-ws-federation-sign-out.aspx

更新

,你将不得不手动登录。

如果您的AD属性经常发生变化,声明并不是最佳解决方案。您应该通过C#DirectoryServices获得AD的属性。

+0

谢谢nzpcmad, 这篇文章给了我很好的关于注销过程的知识。 但它没有提到我们如何注销并以编程方式登录该用户? –

+0

您必须点击该网址。 – nzpcmad

+0

好吧,我这样做,它只是让我出去。如何在不询问凭据的情况下登录同一用户 –