Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置Azure ACS角色_Azure_Visual Studio 2012_Roles_Identity_Acs - Fatal编程技术网

设置Azure ACS角色

设置Azure ACS角色,azure,visual-studio-2012,roles,identity,acs,Azure,Visual Studio 2012,Roles,Identity,Acs,嘿,伙计们,我不确定这是否是一个合适的论坛,但我想弄清楚这一点,真是不知所措 所以,我想快速了解一下我要做的事情。我正在为我的大学高年级项目工作,它实际上是与微软合作的,但我的webforms应用程序已经完成了,我正在尝试使用一些基于角色的标识设置ACS。我正在使用VS 2012,我已经让ACS使用windows live Id和Google登录正常工作。我的问题是,当我试图将整个应用程序仅限于管理员用户时。我在网上看过很多教程,但它们似乎都是VS2010的,这与2012年有很大的不同。我的问题

嘿,伙计们,我不确定这是否是一个合适的论坛,但我想弄清楚这一点,真是不知所措

所以,我想快速了解一下我要做的事情。我正在为我的大学高年级项目工作,它实际上是与微软合作的,但我的webforms应用程序已经完成了,我正在尝试使用一些基于角色的标识设置ACS。我正在使用VS 2012,我已经让ACS使用windows live Id和Google登录正常工作。我的问题是,当我试图将整个应用程序仅限于管理员用户时。我在网上看过很多教程,但它们似乎都是VS2010的,这与2012年有很大的不同。我的问题尤其在于,我无法查看Windows live id提供给我的名称标识符,以便在azure中发挥作用。例如,如果someone@live.com登录后,我可以返回nameidentifier=“x”,然后使用该nameidentifier创建一个角色。我似乎找不到查看名称标识符的方法

有没有人知道如何在vs 12中实现这一点,或者有任何教程?或者,如果有人知道如何以不同的方式完成我的解释,我将不胜感激

非常感谢您的帮助


我也看到了@AntonStaykov的很多作品,但不完全是我想要的,如果你也在这里帮忙,我会非常感激

如果您的目标是.NET Framework 4.5,那么与2012年相比,该工具确实有所不同。大部分是由Windows身份基础在4.5中内置到框架中的事实驱动的。因此,如果只针对.NETFramework4.0,可以消除一些摩擦。有了这一点,您也将获得与所参考教程类似的体验(假设这些教程的目标是.NET 4.0或更早版本)

我不知道你为什么不能查看名称标识符。也许你可以提供更多关于这个问题的背景知识?例如,您是否在ACS门户、代码等中


-Rick

如果您的目标是.NET Framework 4.5,那么与2012年相比,该工具确实有所不同。大部分是由Windows身份基础在4.5中内置到框架中的事实驱动的。因此,如果只针对.NETFramework4.0,可以消除一些摩擦。有了这一点,您也将获得与所参考教程类似的体验(假设这些教程的目标是.NET 4.0或更早版本)

我不知道你为什么不能查看名称标识符。也许你可以提供更多关于这个问题的背景知识?例如,您是否在ACS门户、代码等中


-Rick

以下是如何在代码中访问nameidentifier声明。这假设您的ACS设置具有默认情况下应提供的直通声明

        ClaimsPrincipal p = System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal;

        Claim cNameIdentifier = p.Claims.First(c => c.Type == ClaimTypes.NameIdentifier);
        if (cNameIdentifier != null)
        {
            string NameIdentifierValue = cNameIdentifier.Value;

            // your code here to implement your logic.

        }
我认为您所追求的是一种增强(或转换)web应用程序中传入声明的方法,这样您就可以实现基于角色的安全性。例如,当令牌访问您的站点时,您希望

  • 检索传入的NameIdentifier声明
  • 根据您自己的逻辑,在存储区(字典、持久存储区、提供程序等)中查找用户是否是管理员
  • 向主体添加一个角色声明,值为“Admin”
  • 这是你的目标吗?如果是这样,则在ClaimsAuthenticationManager中执行此操作


    -Rick

    以下是如何在代码中访问nameidentifier声明。这假设您的ACS设置具有默认情况下应提供的直通声明

            ClaimsPrincipal p = System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal;
    
            Claim cNameIdentifier = p.Claims.First(c => c.Type == ClaimTypes.NameIdentifier);
            if (cNameIdentifier != null)
            {
                string NameIdentifierValue = cNameIdentifier.Value;
    
                // your code here to implement your logic.
    
            }
    
    我认为您所追求的是一种增强(或转换)web应用程序中传入声明的方法,这样您就可以实现基于角色的安全性。例如,当令牌访问您的站点时,您希望

  • 检索传入的NameIdentifier声明
  • 根据您自己的逻辑,在存储区(字典、持久存储区、提供程序等)中查找用户是否是管理员
  • 向主体添加一个角色声明,值为“Admin”
  • 这是你的目标吗?如果是这样,则在ClaimsAuthenticationManager中执行此操作


    -Rick

    您面临的主要问题是使用Live ID(或者,他们现在称之为Microsoft帐户)。如果您仅使用ACS,则无法从Live ID中获取用户的电子邮件。我个人喜欢ACS并使用它,我只是不在乎微软的帐户,或者用其他方式处理它

    如果只想限制管理员对整个应用程序的访问,则必须完成两件事:

  • system.web
    部分中设置授权规则,该规则仅允许
    管理员
    角色访问
  • 在ACS中设置声明规则,以根据某些输入条件生成管理员角色声明
  • 第一步相当简单,只需在
    web.config
    文件的
    system.web
    部分中添加以下内容:

    <authorization>
      <allow roles="Administrator" />
      <deny users="?" />
    </authorization>
    
    
    
    只需确保web.config中没有其他
    授权
    部分

    第二步,简单的部分。 转到您的ACS管理门户,然后转到分配给依赖方应用程序的规则组。并添加具有以下条件的新规则:

  • 为规则选择身份提供者(假设谷歌)
  • 选择要输入的索赔类型:
    http://schemas.xmlsoap.org/claims/EmailAddress
  • 输入索赔值:
    您所需的_admin@gmail.com
    (管理员的电子邮件地址)
  • 选择要为的输出声明类型:
    http://schemas.microsoft.com/ws/2008/06/identity/claims/role
  • 输入输出声明的值:
    Administrator
  • 为规则设置适当的描述,如
    您所需的内容_admin@gmail.com是管理员
  • 保存规则
  • 完成了。对所有要授予管理员权限的人员重复此步骤。当然,您只能为提供<代码的标识提供程序执行此操作