📄 authorization.aspx
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>
<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->
<h4>授权用户和角色</h4>
ASP.NET <b><authorization></b> 用于控制对 URL 资源的客户端访问。它对于用于生成请求的 HTTP 方法(<b>GET</b> 或 <b>POST</b>)是可配置的,并且可被配置为允许或拒绝访问用户组或角色组。下面的示例显示向名为 <i>John</i> 的用户和名为 <i>Admins</i> 的角色授予访问权。所有其他用户的访问被拒绝。
<div class="code"><xmp>
<authorization>
<allow users="jdoe@somewhere.com" />
<allow roles="Admins" />
<deny users="*" />
</authorization>
</xmp></div>
<p>
允许的授权指令元素为 <b>allow</b> 或 <b>deny</b>。每个 <b>allow</b> 或 <b>deny</b> 元素都必须包含 <b>user</b> 或 <b>role</b> 属性。通过提供一个逗号分隔的列表,可在单个元素中指定多个用户或角色。
<p>
<div class="code"><xmp>
<allow users="John,Mary" />
</xmp></div>
<p>
可以使用 <b>Verb</b> 属性指示 HTTP 方法:
<p>
<div class="code"><xmp>
<allow VERB="POST" users="John,Mary" />
<deny VERB="POST" users="*" />
<allow VERB="GET" users="*" />
</xmp></div>
<p>
此示例允许 Mary 和 John <b>POST</b> 到受保护的资源,而只允许其他人使用 <b>GET</b>。
<p>
有两个特殊的用户名:
<ul>
<li><b>*</b>:所有用户</li>
<li><b>?</b>:匿名(未经过身份验证的)用户</li>
</ul>
使用基于窗体的身份验证的应用程序通常使用这两个特殊的用户名拒绝对未经过身份验证的用户的访问,如下面的示例所示:
<p>
<div class="code"><xmp>
<authorization>
<deny users="?" />
</authorization>
</xmp></div>
<p>
URL 授权分层计算,而用于确定访问权的规则如下所示:
<ul>
<li>从整个层次结构中收集与 URL 相关的规则,然后构造合并的规则列表。</li>
<li>将最新规则放置在列表的最前面。这意味着当前目录中的配置位于列表的最前面,后跟直接父级中的配置,依此类推,直到计算机的顶级文件。</li>
<li>对规则进行检查直到找到匹配项。如果匹配项是允许的值,则授予访问权。否则,将不允许访问。</li>
</ul>
这意味着那些对继承配置不感兴趣的应用程序应显式配置与它们的应用程序相关的所有可能的内容。
<p>
给定计算机的默认顶级 Web.config 文件允许访问所有用户。除非应用程序的配置与此相反(假设用户已经过身份验证并通过文件授权 ACL 检查),否则将授予访问权。
<p>
检查角色时,URL 授权有效地遍历配置角色的列表,并执行类似以下伪代码的操作:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
if(User.IsInRole("ConfiguredRole")) {
ApplyRule();
}
</Tab>
<Tab Name="VB">
If User.IsInRole("ConfiguredRole") Then
ApplyRule()
End If
</Tab>
<Tab Name="JScript">
if(User.IsInRole("ConfiguredRole")) {
ApplyRule();
}
</Tab>
</Acme:TabControl><p>
<p>
对于应用程序,这意味着使用您自己的实现 <b>System.Security.Principal.IPrincipal</b> 的类来提供您自己的角色映射语义,详见<a href="/quickstart/aspplus/doc/windowsauth.aspx">基于 Windows 的身份验证</a>中的解释。
</p>
下面的示例使用基于窗体的身份验证服务。它显式拒绝对 <i>jdoe@somewhere.com</i> 和匿名用户的访问。尝试以 Username="jdoe@somewhere.com" 和 Password="password" 登录到该示例。访问将被拒绝,您将被重定向回登录页。现在以 Username="mary@somewhere.com" 和 Password="password" 的身份登录。您将看到访问被授予。
<p>
<Acme:LangSwitch runat="server">
<CsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/security/UserAuth/CS/default.aspx"
ViewSource="/quickstart/aspplus/samples/security/UserAuth/userauth.src"
Icon="/quickstart/aspplus/images/userauth.gif"
Caption="C# 使用 URL 授权的基于窗体的 /Cookie 身份验证"
runat="server" />
</CsTemplate>
<VbTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/security/UserAuth/VB/default.aspx"
ViewSource="/quickstart/aspplus/samples/security/UserAuth/userauth.src"
Icon="/quickstart/aspplus/images/userauth.gif"
Caption="VB 使用 URL 授权的基于窗体的 /Cookie 身份验证"
runat="server" />
</VbTemplate>
<JsTemplate>
<Acme:SourceRef
RunSample="/quickstart/aspplus/samples/security/UserAuth/JS/default.aspx"
ViewSource="/quickstart/aspplus/samples/security/UserAuth/userauth.src"
Icon="/quickstart/aspplus/images/userauth.gif"
Caption="JScript 使用 URL 授权的基于窗体的 /Cookie 身份验证"
runat="server" />
</JsTemplate>
</Acme:LangSwitch>
<p>
<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -