你的主要问题,是使用Live ID(或,因为他们现在称之为 - 微软账户)。如果您仅使用ACS,则无法从Live ID获取用户的电子邮件。我个人喜欢ACS并使用它,我只是不在乎Microsoft帐户,或者以其他方式处理它。
如果要限制访问整个应用程序只为管理员,你必须完成两两件事:
- 设置的授权规则在
system.web
节只Administrator
角色
- 设置索赔提供访问根据一些输入标准,ACS中的规则可以生成
Administrator
角色声明。
第一步是相当容易,只需添加您system.web
段内按照您的web.config
文件:
<authorization>
<allow roles="Administrator" />
<deny users="?" />
</authorization>
只要确保没有其他authorization
部分在你的web.config!
第二步,简单的部分。 转到您的ACS管理门户,然后转到分配给您的信赖方应用程序的规则组。并添加新的规则如下标准:
- 选择了该规则的身份提供商(假设谷歌)
- 选择输入声明类型为:
http://schemas.xmlsoap.org/claims/EmailAddress
- 输入索赔值:
[email protected]
(中管理员的电子邮件地址)
- 选择输出声明类型为:
Administrator
:
http://schemas.microsoft.com/ws/2008/06/identity/claims/role
- 的输出要求输入值
- 为规则设置正确的描述,类似
[email protected] is Administrator
。
- 保存规则。
完成。为所有想要授予管理员权限的人重复此步骤。当然,你只能为身份提供者这样做,它会给你。对于Microsoft帐户用户很抱歉。
当Microsoft帐户持有者通过Azure ACS来访问管理员权限时,没有简单的方法。你拥有的唯一的东西是一个名称标识符索赔,或http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
(我将其称为NIC
为简单起见
NIC
是以下组合独特:。User Identity ([email protected])
+ ACS NameSpace
+ Relying Party Application
这意味着,如果[email protected]
造访您应用程序通过mygreat.accesscontrol.windows.net
您将获得该用户的唯一NIC
。如果同一用户通过someother.accesscontrol.windows.net
登录我的网站,我将获得全新的NIC
,这将再次在全球范围内唯一,但不会与一个你的应用得到了。
而且,你可以im agine,你不能为来自Live ID的任何用户猜测NIC
。为Live ID启用此方案需要更复杂的逻辑。我没有时间和空间在这里描述,但我可能会找到一个好的博客文章的时间。
您可以在您的应用程序逻辑中获得NameIdentifier声明,正如Rick已经指出的那样,但是您是否真的想为所有用户和任何用户提供“管理员”角色?另外,我会离开我的应用程序,因为每一次登录都会混淆ACS中的规则。有更好的方法来实现你想要的东西(就像我说的,写博客的时间)。
所以基本上我想要做的是如果有人使用Windows Live ID登录... [email protected]他们产生一个nameidentifier =“x”我希望能够看到代码中的名称标识符是什么这样我就可以将该输出作为acs中的一个要求并命名角色admin。理论上我需要为每个用户都这样做。除非有一些解决这个问题的方法,否则就容易得多。总之,我希望有一定数量的用户能够访问我的网络表单应用程序,因为它仅供管理员使用 – 2013-03-13 02:36:40