0

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

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

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

4

4 回答 4

3

最简单的实际上是在 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等工具)

于 2012-08-14T14:38:50.610 回答
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" />
于 2012-09-03T21:46:51.157 回答
0

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

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

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

于 2012-08-14T13:44:27.073 回答
0

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

会员介绍

通过会员服务,您拥有身份验证和授权。成员身份具有角色,您甚至可以在 web.config 中使用角色。

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

于 2012-08-14T15:47:10.223 回答