【问题标题】:Windows Azure Role Based authentication (ACS)Windows Azure 基于角色的身份验证 (ACS)
【发布时间】:2012-08-14 13:25:01
【问题描述】:

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

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

谁能给我一个提示,或链接到一个清晰的教程或建议我任何想法?

【问题讨论】:

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


    【解决方案1】:

    最简单的其实就是在 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 这样的工具等)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

          除了 ACS 之外,还有一个选项是会员服务。

          Introduction to Membership

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

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

          【讨论】:

            猜你喜欢
            • 2016-01-03
            • 1970-01-01
            • 1970-01-01
            • 2021-11-22
            • 2019-10-10
            • 2017-08-03
            • 1970-01-01
            • 2016-03-07
            • 2014-04-04
            相关资源
            最近更新 更多