基于表单的身份验证与代码访问权限详解
立即解锁
发布时间: 2025-08-20 00:59:05 阅读量: 1 订阅数: 4 


深入解析C#与.NET框架应用开发精髓
### 基于表单的身份验证与代码访问权限详解
#### 一、基于表单的身份验证
在公共网站场景中,由于Windows集成安全无法跨防火墙或代理工作,且对于没有服务器或域上Windows用户账户的情况,我们需要采用基于表单的身份验证方法。下面介绍两种常见的实现方式。
##### 1. 使用`.NET FormsAuthentication`类和`web.config`文件
这种方式通过`web.config`文件配置身份验证和授权信息。以下是一个示例`web.config`文件的配置:
```xml
<authentication mode="Forms">
<forms name = "HotelBrokerCookie" path="/"
loginUrl="Login.aspx"
protection="All" timeout="10">
<credentials passwordFormat="Clear">
<user name="Natasha" password="Natasha" />
<user name="Adams" password="Adams" />
<user name="peter" password="peter" />
</credentials>
</forms>
</authentication>
<authorization>
<allow users="Natasha,peter" />
<deny users="*" />
</authorization>
```
各属性解释如下:
| 属性 | 说明 |
| ---- | ---- |
| `mode` | 身份验证模式,这里设置为`Forms`。 |
| `name` | cookie的名称。 |
| `path` | cookie在网站上的有效范围,`/`表示整个网站。 |
| `loginUrl` | 登录表单的位置。 |
| `protection` | cookie的加密方式,`All`表示验证和加密。 |
| `timeout` | cookie的有效时长(分钟)。 |
| `passwordFormat` | 密码的存储格式,这里使用明文`Clear`,也可使用`SHA1`或`MD5`加密。 |
处理登录按钮事件的代码如下:
```csharp
private void Login_Click(object sender, EventArgs e)
{
if (FormsAuthentication.Authenticate(txtUserId.Text,
txtPassword.Text))
{
FormsAuthentication.RedirectFromLoginPage(
txtUserId.Text, true);
}
else
{
lblErrorMessage.Text = "Could not authenticate user.";
}
}
```
用户访问时,若系统中没有有效cookie,将被重定向到登录页面;若有有效cookie,则直接验证用户并跳转至`default.aspx`页面。
##### 2. 数据库登录验证
在注册用户时,将密码进行哈希处理后存储在数据库中。示例代码如下:
```csharp
string password =
FormsAuthentication.HashPasswordForStoringInConfigFile
(txtPassword.Text, "MD5");
bool ok = HotelState.acme.Register(txtUserId.Text,
password, txtFirstName.Text, txtLastName.Text,
txtEmailAddress.Text);
```
登录时,再次对输入的密码进行哈希处理并与数据库中存储的密码进行比较:
```csharp
string password =
FormsAuthentication.HashPasswordForStoringInConfigFile
(txtPassword.Text, "MD5");
bool ok = HotelState.acme.Login(txtUserId.Text, password);
```
#### 二、代码访问权限
代码需要权限才能访问资源或执行操作,安全策略会为每个程序集授予特定权限。以下是一些常见的代码访问权限:
| 权限类 | 说明 |
| ---- | ---- |
| `DNSPermission` | 控制对网络上域名服务器的访问。 |
| `EnvironmentPermission` | 控制对环境变量的读写访问。 |
| `FileIOPermission` | 控制对文件和目录的访问。 |
| `FileDialogPermission` | 允许读取在打开对话框中选择的文件。 |
| `ReflectionPermission` | 控制访问非公共元数据和发出元数据的能力。 |
| `RegistryPermission` | 控制访问和修改注册表的能力。 |
| `SecurityPermission` | 控制安全子系统的使用。 |
| `SocketPermission` | 控制在传输地址上建立或接受连接的能力。 |
| `UIPermission` | 控制各种用户界面功能的使用,包括剪贴板。 |
| `WebPermission` | 控制在Web地址上建立或接受连接的能力。 |
##### 1. 简单权限代码请求
以请求访问文件权限为例,代码如下:
```csharp
string filename = ".\\read.txt";
string fileWithFullPath = Path.GetFullPath(filename);
try
{
FileIOPermission fileIOPerm = new
FileIO
```
0
0
复制全文
相关推荐








