繁体   English   中英

Windows Azure基于角色的身份验证(ACS)

[英]Windows Azure Role Based authentication (ACS)

我已经在Windows Azure Cloud上运行了Asp.net mvc4项目。 但是到目前为止,它还没有任何用户管理功能。 任何人都可以登录(我有一个Windows Live单点登录)。 但是现在我需要做基于角色的最简单的身份验证。

1.我想注册用户角色(管理员,用户,内容管理员)/可以手动完成。 2.我需要根据用户登录时的角色对他们进行身份验证。

任何人都可以给我提示,或者链接到清晰的教程,或者给我提出任何想法吗?

最简单的方法实际上是在ACS发行的令牌中添加“角色”声明。 既然您说现在可以手动执行此操作,那么您将使用ACS门户创建这些规则。

在您的应用中,您将执行通常的操作,例如使用“ Authorize”属性装饰动作,包括角色:

[Authorize(Roles="Administrator")]
public ActionResult Index()
{
  var b = User.IsInRole("Manager");
...
}

只要您使用“角色”声明类型,一切都会起作用。 (这也可以自定义,但是可以通过这种方式立即使用)。

您将面临的唯一挑战是LiveID。 LiveID仅给您一个唯一的标识符。 您需要一种将标识符与已知用户(例如电子邮件或姓名)进行映射的方法。 这通常需要两步过程。 您首先进行身份验证并获得唯一的ID,然后要求用户提供其信息并进行验证(例如,通过发送电子邮件)。

使用任何其他身份提供程序,您都不会遇到此问题,因为它们都给您提供了电子邮件和名称。

编写上述规则很容易:

  • 电子邮件:joy@mail.com->角色:管理员
  • 电子邮件:someone@mail.com->角色:经理...

如果您有更多的用户或更多的规则,则门户通常不再实用,并且您将需要其他功能(例如,使用应用程序中的API,使用脚本,使用auth10之类的工具等)。

我为项目解决该问题的方法是添加ClaimsAuthenticationManager并将用户角色添加到那里的身份中。

namespace Claims
{
  public class RoleClaimsAuthenticationManager : ClaimsAuthenticationManager

    public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
    {
        if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated)
        {
            var identity = (ClaimsIdentity)incomingPrincipal.Identity;
            var roles = getRolesForIdentity(identity); //Get the roles for your identity here
            foreach (var r in roles)
            {
                 identity.AddClaim(new Claim(ClaimTypes.Role, r.Name));
            }
        }

        return base.Authenticate(resourceName, incomingPrincipal);
    }
}

然后将其连接到system.identityModel -> identityConfiguration部分的配置中

<claimsAuthenticationManager type="Claims.RoleClaimsAuthenticationManager, Claims" />

您可能已经注意到ACS负责身份验证而不是授权,因此您需要自己处理。

最简单的方法是每次有新用户连接时在应用程序中创建一个“配置文件”。 为特定用户创建配置文件时,您需要将身份提供者和该用户的名称与配置文件一起存储。 存储此信息将使您下次连接该用户时可以获取该用户的配置文件(您将从声明中获取此信息,但这取决于您配置ACS的方式)。

对于完整的示例,您应该查看BlobShare应用程序的源代码(使用身份验证和授权)。

除ACS之外的一种选择是会员服务。

会员简介

使用会员服务,您既可以进行身份​​验证也可以进行授权。 成员资格具有角色,您甚至可以在web.config中使用角色。

ACS并不是一个不错的选择。 我只提出另一种选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM