使用WPF客户端进行用户身份认证Asp.net web服务器简单示例
本示例功能,创建一个Web服务器,一个WPF客户端,实现在WPF客户端上进行用户验证
开发环境:Vs2013~Vs2015
语言:C#
模板:WPF和ASP.NET WEB
操作步骤大纲
一,服务器端
1,新建一个Asp.net Mvc项目(..\ASPSecurititySamples\AppServices),在项目属性(properties)的Web选项卡中,
将项目URL设置为http://localhost:57571/AppServices(自定义)
2,在项目根目录下添加2个类文件SampleMembershipProvider.cs和SampleRoleProvider.cs(身份验证提供程序类和角色管理提供程序类)
3,配置Web.config
二客户端
1,新建一个WPF项目(..\AuthenticationServices\AuthenticationServices)
在默认窗口中添加登陆界面
3,在App.Config中配置验证设置
详细步骤:
一·,服务器端
1,新建一个Asp.net Mvc项目(..\ASPSecurititySamples\AppServices),在项目属性(properties)的Web选项卡中,
将项目URL设置为http://localhost:57571/AppServices(自定义),如图:

"57571/AppServices"为自定义的端口和虚拟路径
2,在项目根目录下添加2个类文件SampleMembershipProvider.cs和SampleRoleProvider.cs(身份验证提供程序类和角色管理提供程序类)下面是两个文件中的关键代码
//... using System.Web.Security; //... ... public class SampleMembershipProvider : MembershipProvider { #region 定义用户数据库,也可以用数据库来定义,这里使用字典来存储用户 private Dictionary<string, string> users = new Dictionary<string, string>(); internal static string ManagerUserName = "Manager".ToLowerInvariant(); internal static string EmployeeUserName = "Employee".ToLowerInvariant(); public override void Initialize(string name, NameValueCollection config) { users.Add(ManagerUserName, "yourPassword1"); users.Add(EmployeeUserName, "yourPassword2"); base.Initialize(name, config); } #endregion //验证用户 public override bool ValidateUser(string username, string password) { if (users.ContainsKey(username.ToLowerInvariant())) { return password.Equals(users[username.ToLowerInvariant()]); } return false; } //其他方法....
在这个类中存储了一些用户数据,重写实现了ValidUser方法
... using System.Web; using System.Web.Security; ... public class SampleRoleProvider : RoleProvider { //定义角色 internal static string ManagerRoleName = "Manager".ToLowerInvariant(); internal static string EmployeeRoleName = "Employee".ToLowerInvariant(); public override void Initialize(string name, NameValueCollection config) { base.Initialize(name, config); } public override string[] GetRolesForUser(string username) { if (string.Compare(username,SampleMembershipProvider.ManagerUserName,true)==0) { return new string[] { ManagerRoleName,EmployeeRoleName }; } else if (string.Compare(username, SampleMembershipProvider.EmployeeUserName, true) == 0) { return new string[] { EmployeeRoleName }; } else { return new string[0]; } } public override bool IsUserInRole(string username, string roleName) { string[] roles = GetRolesForUser(username); foreach (var role in roles) { if (string.Equals(role,roleName)) { return true; } } return false; } ... }
3,在Web.config中配置相关内容(使用CustomAddItem 和EndCustomAddItem标记之间的部分)
<configuration>
... <system.web.extensions> <scripting> <webServices> <authenticationService enabled="true" requireSSL="false"/> <roleService enabled="true"/> </webServices> </scripting> </system.web.extensions> <system.web> <membership defaultProvider="SampleMembershipProvider"> <providers> <add name="SampleMembershipProvider" type="AppServices.SampleMembershipProvider"/> </providers> </membership> <roleManager enabled="true" defaultProvider="SampleRoleProvider"> <providers> <add name="SampleRoleProvider" type="AppServices.SampleRoleProvider"/> </providers> </roleManager> <authentication mode="None" /> <compilation debug="true" targetFramework="4.5.2" /> <httpRuntime targetFramework="4.5.2" /> <httpModules> <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> </httpModules> </system.web>
...
</configuration>
二客户端
1,新建一个WPF项目(..\AuthenticationServices\AuthenticationServices)
在默认窗口中添加登陆界面,下面是界面xaml代码
<Grid> <!--CustomAddItem--> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label VerticalAlignment="Center" Margin="5" Grid.Row="0" Grid.Column="0" Content="用户名:" /> <Label VerticalAlignment="Center" Margin="5" Grid.Row="1" Grid.Column="0" Content="密码:" /> <TextBox x:Name="textUsername" Margin="5" Grid.Row="0" Grid.Column="1" /> <PasswordBox x:Name="textPassword" Margin="5" Grid.Row="1" Grid.Column="1" /> <Button x:Name="buttonLogin" Click="OnLogin" Grid.Row="2" Grid.Column="1" Margin="5" Content="登陆" /> <TextBlock Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" x:Name="labelValidatedInfo" Visibility="Hidden" Text="用户验证成功" HorizontalAlignment="Center" VerticalAlignment="Center" /> <!--EndCustomAddItem--> </Grid>
Button 单击事件代码
private void OnLogin(object sender, RoutedEventArgs e) { try { labelValidatedInfo.Visibility = Visibility.Hidden; if (Membership.ValidateUser(textUsername.Text, textPassword.Password)) { // user validated! labelValidatedInfo.Visibility = Visibility.Visible; } else { MessageBox.Show("用户名与密码不匹配", "Client Authentication Services", MessageBoxButton.OK, MessageBoxImage.Warning); } } catch (WebException ex) { MessageBox.Show(ex.Message, "Client Application Services", MessageBoxButton.OK, MessageBoxImage.Error); } }
2,配置App.config文件
<!--CustomAddItem--> <system.web> <membership defaultProvider="ClientAuthenticationMembershipProvider"> <providers> <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="http://localhost:57571/AppServices/Authentication_JSON_AppService.axd" /> </providers> </membership> <roleManager defaultProvider="ClientRoleProvider" enabled="true"> <providers> <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="http://localhost:57571/AppServices/Role_JSON_AppService.axd" cacheTimeout="86400"/> </providers> </roleManager> </system.web> <!--EndCustomAddItem-->

浙公网安备 33010602011771号