嘿,伙计们,我不确定这是否是合适的论坛,但我正绞尽脑汁试图弄清楚这一点。
所以简单介绍一下我要做的事情。我正在做我的大学毕业项目,实际上是和微软一起做的,但我的webforms应用程序已经完成了,我正在尝试用一些基于角色的标识来设置ACS。我使用的是vs2012,我已经使用windows live Id和Google登录让ACS正常工作了。当我试图将整个应用程序仅限于管理员用户时,我的问题就出现了。我在网上看到了很多教程,但它们似乎都是VS2010的,这与2012年有很大的不同。我的问题尤其在于,我无法查看Windows live id为我提供的nameidentifier,从而无法在azure中发挥作用。例如,如果someone@live.com登录,我可以返回nameidentifier= "x“,然后从该名称标识符中创建一个角色。我似乎找不到查看名称标识符的方法?
有没有人知道如何在VS12中使用它,或者有任何教程?或者,如果有人知道用不同的方式来做我正在解释的事情,我将非常感激!
任何帮助都是非常感谢的!
我也看到了@AntonStaykov的许多作品,但并不完全是我想要的,如果你也在这里协助我,我会非常感激。
发布于 2013-03-13 13:03:58
下面是如何在代码中访问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应用程序中传入声明的方法,这样你就可以实现基于角色的安全性了。例如,当令牌命中您的站点时,您希望
这是你的目标吗?如果是这样的话,可以在ClaimsAuthenticationManager中执行此操作。
http://msdn.microsoft.com/en-us/library/system.security.claims.claimsauthenticationmanager.aspx
-Rick
发布于 2013-03-13 18:19:34
你的主要问题是使用Live ID (或者,他们现在叫它- Microsoft帐户)。如果您只使用ACS,则无法从Live ID中获取用户的电子邮件。我个人喜欢并使用ACS,我只是不关心微软的账号,或者用其他方式处理它。
如果您想限制管理员对整个应用程序的访问,您必须完成两件事:
system.web部分中的
Administrator role Administrator角色声明。第一步相当简单,只需在web.config文件的system.web部分中添加以下内容:
<authorization>
<allow roles="Administrator" />
<deny users="?" />
</authorization>只需确保您的web.config中没有其他authorization部分!
第二步,简单的部分。转到您的ACS管理门户,然后转到分配给您的依赖方应用程序的规则组。并添加具有以下条件的新规则:
Google)
http://schemas.xmlsoap.org/claims/EmailAddress
http://schemas.microsoft.com/ws/2008/06/identity/claims/roleAdministrator your_desired_admin@gmail.com is Administrator.
好了。对要授予管理员权限的所有人员重复此步骤。当然,您只能为将为您提供E-mail Address的身份提供者执行此操作。很抱歉,Microsoft帐户用户。
当Microsoft帐户持有者通过Azure ACS访问时,没有简单的方法可以为他们提供管理员权限。您唯一拥有的就是名称标识符声明,或http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier (为简单起见,我将其称为NIC。
NIC在以下组合上是唯一的:User Identity (me@live.com) + ACS NameSpace + Relying Party Application。这意味着如果通过mygreat.accesscontrol.windows.net me@live.com登录到你的应用程序,你将获得该用户的唯一NIC。如果完全相同的用户通过someother.accesscontrol.windows.net登录到我的站点,我将获得完全新的NIC,这将再次是全局唯一的,但不会与您的应用程序获得的不同。
而且,正如你可以想象的,你无法猜测任何来自Live ID的用户的NIC。为Live ID启用这个场景需要更复杂的逻辑。我没有时间和篇幅在这里描述,但我可能会找到时间写一篇很好的博客文章。
正如Rick已经指出的,您可以在应用程序逻辑上获得NameIdentifier声明,但是您真的想为所有用户和任何用户提供“管理员”角色吗?此外,我不会离开我的应用程序,而是为每次登录在ACS中打乱规则。有更好的方法来实现你想要的(正如我所说的,是时候写博客了)。
发布于 2013-03-13 10:21:20
如果你的目标是.NET Framework4.5,那么这个工具在VS2012中确实是不同的。这在很大程度上是由Windows Identity Foundation在4.5中内置到框架中这一事实推动的。因此,如果您只针对.NET Framework4.0,您可能会消除一些摩擦。这样,您也将拥有与您所引用的教程相似的体验(假设这些教程针对的是.NET 4.0或更早版本)。
我不知道为什么您不能查看名称标识符。也许你可以围绕这个问题提供更多的背景信息?例如,您是否在ACS门户中,在代码中,等等?
-Rick
https://stackoverflow.com/questions/15375253
复制相似问题