2013-04-29 56 views
1

我有一个网站配置为使用Azure ACS。当用户在本网站上签名时,当他访问我的另一个网站时,我将如何获得用户身份,以便用户无需在ACS中选择并登录他的身份提供者?有没有办法从多个网站获取ACS的用户身份,以便一旦用户登录到我的某个网站,当他访问其他ACS配置的网站时,他将被识别为登录用户? BTW Im使用Azure ACS中的所有4个社交网站作为身份提供者。如何使用ACS登录另一个网站后在网站上登录用户身份

+0

有没有现成的方式来实现这一点。但是,由于您控制了所有网站,因此您可以执行某些操作。我试图找出如何把它放在一个单一的答案,但。因为它不像我希望的那样直截了当。 – astaykov 2013-04-29 12:22:11

+0

你能否提供给我相关资源的链接?如果我通过基于声明和基于角色的身份验证实现混合方法,我会走在正确的轨道上吗?我只是让自己的身份提供者充当所有网站的用户存储库,并让网站检查用户是否登录到IP?但我不知道这是否会奏效,或者是否有其他方式。 – AshT 2013-04-29 14:39:30

+0

我能想到的一个愚蠢的做法是,一旦用户通过ACS验证了用户身份,就可以传回给您的网站一些加密的令牌,其中包含用户的身份。每当您从一个站点跳到另一个站点时,绕过此令牌。每当在服务器端发现发送的令牌为空或无效时,假定用户未登录。如果所有网站都在同一个域中,则可以使用cookie轻松传递令牌。没有多少考虑利弊,但似乎合法。 – letsc 2013-05-13 16:10:08

回答

1

每个网站都不同于ACS的角度,所以它会发布的令牌也不同。然而SSO,发生在国内流离失所者级别:

  1. 用户登录在与谷歌(作为一个例子)网站上的1
  2. 用户进入网站2,(用相同的浏览器实例),WEBSITE2重定向到ACS, ACS重定向到谷歌
  3. 用户已经与谷歌认证,回来ACS
  4. ACS发出令牌(用于WEBSITE2),并返回到WEBSITE2

ACS不保留会话与用户,以便他们会被迫做th整个交易至少一次。

可能发生的情况是,如果您有4个社交IdP(Google,Live,FB,Yahoo大概),则在步骤2中ACS将提示用户使用IdP。

为避免这种情况,您必须将登录请求发送给ACS,并使用whr参数。你必须记住你的用户使用了哪一个,并指示ACS使用它。用whr,没有IdP提示。

+0

如何在ACS中存在+1时重定向到特定的IdP(即O365)。使用哪个参数? – Jorge 2015-11-05 16:44:41

+1

我不会再推荐使用ACS,因为它已被弃用。 – 2015-11-10 22:56:09