识别Azure ACS中的角色

1my*_*myb 1 c# identity azure claims-based-identity acs

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

问题1:如何链接?

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

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

谢谢

ast*_*kov 6

在使用ACS(以及一般索赔)时,您应该注意一件事 - 您应该了解索赔.

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

您获得的唯一性是NameIdentifier声明(代表: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中维护这些角色.我建议您使用应用程序数据库保留用户角色分配.您拥有本地用户帐户的部分,您将为每个帐户分配角色.

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