识别Azure ACS中的角色

时间:2012-05-18 15:52:50

标签: c# azure identity claims-based-identity acs

正如我们在Web上所了解的那样,Azure ACS获得了很多教程,但大多数教程都停留在将简单的ACS嵌入到网站或应用程序中。现在,我想知道是否可以识别和链接所有着名的用户oauth提供者,并在数据库中添加新用户然后为他们分配角色?在此过程之后,他们只需点击任何提供商,然后将他们带回同一个帐户?你有这样的教程可以分享吗?以下是我想要制作的流程: 窗口直播+谷歌+雅虎+ Facebook,一个人可能拥有所有四个帐户,但后来我也需要他们的信息,然后我创建我的cuatom数据进入页面,问题是我如何链接?如何撤销识别的唯一ID?所以我能认出来......并赋予它角色......

问题1:如何链接?

问题2:如何在系统中识别?

问题3:如何发挥作用?不是从azure管理页面提供,而是通过代码

THX

1 个答案:

答案 0 :(得分:6)

在使用ACS(以及一般声明)时,您应该注意一件事 - 您应该了解Claims

现在,针对ACS的具体问题。 Windows Azure Access Control服务不是可以自动执行所需操作的魔棒。 ACS是使用声明并使用一组特定声明的最简单方法,并且不需要处理不同协议的所有不同实现。实际上,在创建基于浏览器的应用程序时,您使用的是WS-Federation protocol(默认情况下为SAML token,但您也可以使用SWT令牌),而不是OAuth协议。当用户使用您的网站登录时,您获得的用户唯一性是以下两个因素的严格组合:

您获得的唯一性是NameIdentifier claim(由http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier表示)。

第一个问题是,说我通过http://yourcompany.accesscontrol.windows.net向您的网站发现了“john.doe@gmail.com”,您将获得nameidentifier“X”。当我,同样的“john.doe@gmail.com”通过http://yourcompany-live.accesscontrol.windows.net/向您的网站表明自己的身份时,您会获得nameidentifier“Y”!对于通过访问控制服务链接的所有身份提供商而言,情况都是如此。

第二个问题是:Live ID身份提供程序,通过ACS配置时,只会为您提供NameIdentifier声明。仅此而已。

现在回答问题:

  

问题1:如何链接?

链接身份的唯一可行方法是在应用程序中构建自己的链接逻辑。我要做的是停止使用所有自动生成的代码和被动重定向到ACS,但手动处理一些被动联合。这意味着 - 我会注意用户是登录还是不登录。如果没有登录,我会将用户重定向到我自己的自定义登录页面,在那里我将从ACS获得已配置的登录选项。当用户登录时,我将在我自己的用户数据库中为该用户创建一个条目。我将为所有可能的身份提供者提供字段(或链接表),我希望将其链接到单个用户。明白了,我将存储用户可能拥有的所有NameIdentifier。现在,我将如何链接用户帐户。可能有不同的方法。首先,您必须识别用户以允许他/她链接帐户。然后创建让我们说一个带有一些唯一ID的“连接票”(不是GUID,用户可以轻易记住)。向用户显示此ID,并为他提供登录其他提供商的选项(从ACS检索提供者列表)。当用户使用其他提供商时 - 在可以输入票证时显示该字段。检查故障单,如果有效 - 链接到现有帐户。

  

问题2:如何在系统中识别?

正如在回答中提到的那样 - 您需要拥有自己的自定义用户数据库,每个用户将拥有一个帐户,但该帐户将保留由不同权限颁发的所有NameIdentifier声明。因此,您将能够唯一地识别具有链接的帐户的用户。

  

问题3:如何发挥作用?不是从azure管理页面给出,但是   通过代码

在您的体系结构中,维护ACS中的角色非常困难,因为您在需要链接多个帐户时会输入复杂性。我建议您使用应用程序数据库保留用户角色分配。您拥有本地用户帐户的部分,您将为每个帐户分配角色。

注意,当我说本地用户帐户时,我并不是说支持本地登录凭据,而只是支持用户配置文件!