Azure ACS - 最佳实践实施

Fra*_*sco 5 azure wif acs asp.net-mvc-3

大家好,我们正在从头开始在Windows Azure上运行ASP.NET MCV 3应用程序.关于身份验证和授权层,我们正在考虑使用访问控制服务.我看了一些关于ACS的文章,我得到了基本的想法,但我仍然有一些疑问.

我的理解是,使用ACS我们将身份验证过程外包给一个或多个身份提供商(IP),基本上我们相信另一个系统(即Microsoft Live ID)来验证我们的用户.基本过程非常简单:在身份验证阶段,我们将用户重定向(ACS执行)到我们的"受信任"IP之一,这会将用户(使用有效令牌)重定向到ACS并最终重定向到我们的应用程序.这里有很多问题......

由于我们不希望所有具有Live ID帐户的用户都可以访问我们的应用程序,因此我认为应该有另一个流程来验证该用户并检查他是否在我们的应用程序中注册.问题是在哪里?在ACS或我们的应用程序中.?

我对此有一个想法,但我不知道这是否是正确的方法:在注册阶段,系统(我们的网络应用程序)询问用户哪个IP(即Live ID,Google,Facebook和我们的应用程序) .)他想用来在应用程序中验证自己.然后用户在IP系统上进行身份验证过程,当他回来时,我们将他的用户名(IP用户名)存储在我们的数据库中.因此,下次在身份验证阶段,我们可以检查该用户是否已在我们的系统中注册.

如果上述理论是正确的,那就意味着我们的应用程序.我们需要建立会员提供商来存储来自IP的用户名和选择我们应用的用户.作为IP.我对么?设计上述过程的最佳做法是什么?

现在让我们来谈谈授权和"角色".它如何与ACS一起使用?ACS是否为每个用户管理多个角色?

我的理解是,使用ACS,您可以创建许多与IP相关的"规则组",而不是单个用户.如果这是正确的,我们如何在我们的应用程序中管理角色中的用户?比方说,我们有多个角色,我们的用户可以与这些角色相关联,我们可以使用ASC来管理吗?

所以最后的问题是:ACS本身是否涵盖了整个身份验证和授权流程?我们还需要使用.net会员提供商吗?为了满足我们的要求,最佳做法是什么?

非常感谢您的贡献.

Mik*_*win 9

关于注册阶段的问题部分,用于识别用户的最佳方法是NameIdentifier声明类型

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier.

这对于每个身份提供者应该是唯一的并且也是固定的.如果您使用电子邮件地址声明,则可能会更改同一用户.从技术上讲,两个身份提供者可能使用相同的NameIdentifier(没有任何开箱即用的ACS),因此您可以将NameIdentifier声明与IdentityProvider声明类型结合使用

http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider

保证独特性.

对于关于角色的部分,我会说使用ACS来发布来自通用身份的角色声明,就像基于每个用户使用ACS中的声明转换规则一样,很难管理Google.您必须为每个注册用户添加规则 - 可能不可行.我认为ACS规则组更适合于角色声明的转换(例如,由联合ADFS发布).你的想法在你的应用程序中这样做是一个更好的恕我直言.在代码中,使用WIF执行此操作的位置是自定义的ClaimsAuthenticationManager.您可以覆盖其Authenticate方法,并根据NameIdentifier传入原则中的声明,查找您的成员资格数据存储区并IClaimsPrinciple根据您的成员资格数据库中的角色创建新的(即您为用户所在的每个角色添加角色声明) .

然后,您可以在自定义中做出授权决定ClaimsAuthorizationManager.网上有一些很好的样本和信息.你可以从

http://msdn.microsoft.com/en-us/library/ee748497.aspx


And*_*ers 1

用户验证过程是通过声明完成的。

使用 ACS 设置 IP 后,当用户进行身份验证时,ACS 将从该 IP 获取有关经过身份验证的用户的声明。您需要在 ACS 中配置规则来说明您想要将哪些声明转发到您的应用程序。您还可以将声明转换为不同的类型,将传入的声明集规范化为您的应用程序所期望的

如果您想使用 ACS 实施基于角色的访问,则可以。在这种情况下,角色只是 ACS 将发出的另一个声明,您将实施您的应用程序,根据从 ACS 收到的角色声明来授予用户权限。

您可以配置 ACS 规则,将某些 IP 输入声明映射到角色输出声明。ACS 还具有可以更改这些规则的管理服务,以便您可以实施用户注册过程。

ACS 中的单个声明规则与发出声明的身份提供商相关,但规则组则不然。规则组与 RP(您的应用程序)关联。规则组只是一组声明转换规则,它告诉 ACS:“对于此应用程序,在颁发令牌时应用此规则组策略”。

ACS 文档有很多关于 ACS 声明规则配置的内容,无论是通过 Web 门户还是通过管理服务:

https://msdn.microsoft.com/library/azure/hh147631.aspx

扩展响应:

假设您正在使用 ACS 对使用 WIF 的 ASP.NET 应用程序进行身份验证。您可以将 ACS 配置为向电子邮件为“jdoe@gmail.com”的 google 用户发出“经理”角色声明。

现在,在您的 ASP.NET 应用程序中,WIF 将看到此角色声明,并且允许您使用 HttpContext.Current.User.IsInRole("Manager") 或等效的 web.config 来控制访问。

您可以使用 Web UI 手动管理这些 ACS 规则,也可以实施注册过程,使用 ACS 管理服务以编程方式将此类规则添加到 ACS。acs.codeplex.com 上提供了一些 ACS 管理服务示例。

此外,身份开发人员培训套件还提供了一些有关基于 WIF 角色的访问的示例:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=14347