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

时间:2012-08-14 13:25:01

标签: asp.net asp.net-mvc-3 azure acs

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

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

任何人都可以给我一个提示,或链接到一个明确的教程或建议我吗?

4 个答案:

答案 0 :(得分:3)

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

在你的应用中,你会做通常的事情,比如用“授权”属性修饰动作,包括角色:

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

只要您使用“角色”声明类型,一切正常。 (这也可以自定义,但它以这种方式开箱即用)。

您将遇到的唯一挑战是LiveID。 LiveID只为您提供唯一标识符。您需要一种将标识符映射到已知用户(例如电子邮件或名称)的方法。这通常需要两个步骤。您首先进行身份验证并获取唯一ID,然后向用户询问其信息并进行验证(例如,通过发送电子邮件)。

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

编写上述规则非常简单:

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

如果您拥有更多用户或更多规则,那么门户网站通常不再实用,您将需要其他东西(例如,使用您应用中的API,使用脚本,使用像{{3这样的工具等等。)

答案 1 :(得分:1)

我为项目解决这个问题的方法是添加一个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" />

答案 2 :(得分:0)

您可能已经注意到ACS处理身份验证而非授权,您需要自己处理。

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

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

答案 3 :(得分:0)

ACS以外的选项是会员服务。

Introduction to Membership

使用会员服务,您同时拥有身份验证和授权。成员资格具有角色,您甚至可以使用web.config中的角色。

ACS不是一个糟糕的选择。我只提出另一种选择。