使用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;
        }
        //其他方法....
SampleMembershipProvider.cs

在这个类中存储了一些用户数据,重写实现了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;
        }
...
    }
SampleRoleProvider.cs

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-->

 

posted @ 2017-02-27 13:40  joelylee  阅读(491)  评论(0)    收藏  举报