设置Azure ACS角色
嘿,伙计们,我不确定这是否是一个合适的论坛,但我想弄清楚这一点,真是不知所措 所以,我想快速了解一下我要做的事情。我正在为我的大学高年级项目工作,它实际上是与微软合作的,但我的webforms应用程序已经完成了,我正在尝试使用一些基于角色的标识设置ACS。我正在使用VS 2012,我已经让ACS使用windows live Id和Google登录正常工作。我的问题是,当我试图将整个应用程序仅限于管理员用户时。我在网上看过很多教程,但它们似乎都是VS2010的,这与2012年有很大的不同。我的问题尤其在于,我无法查看Windows live id提供给我的名称标识符,以便在azure中发挥作用。例如,如果someone@live.com登录后,我可以返回nameidentifier=“x”,然后使用该nameidentifier创建一个角色。我似乎找不到查看名称标识符的方法 有没有人知道如何在vs 12中实现这一点,或者有任何教程?或者,如果有人知道如何以不同的方式完成我的解释,我将不胜感激 非常感谢您的帮助设置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年有很大的不同。我的问题
我也看到了@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应用程序中传入声明的方法,这样您就可以实现基于角色的安全性。例如,当令牌访问您的站点时,您希望
-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应用程序中传入声明的方法,这样您就可以实现基于角色的安全性。例如,当令牌访问您的站点时,您希望
-Rick您面临的主要问题是使用Live ID(或者,他们现在称之为Microsoft帐户)。如果您仅使用ACS,则无法从Live ID中获取用户的电子邮件。我个人喜欢ACS并使用它,我只是不在乎微软的帐户,或者用其他方式处理它 如果只想限制管理员对整个应用程序的访问,则必须完成两件事:
system.web
部分中设置授权规则,该规则仅允许管理员
角色访问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是管理员