zoukankan
html css js c++ java
.NET中通过域验证用户名和密码
类代码:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
System.Runtime.InteropServices;
//
必要引用
using
System.Security.Principal;
//
必要引用
/**/
///
<summary>
///
UserLoginForDomain 的摘要说明
///
适用ASP.NET 2.0
///
Windows XP 调试成功
///
调用”advapi32.dll“win32 API
///
</summary>
public
class
UserLoginForDomain
{
public
UserLoginForDomain()
{
//
//
TODO: 在此处添加构造函数逻辑
//
}
【用户登录域】方法
#region
【用户登录域】方法
public
const
int
LOGON32_LOGON_INTERACTIVE
=
2
;
public
const
int
LOGON32_PROVIDER_DEFAULT
=
0
;
WindowsImpersonationContext impersonationContext;
[DllImport(
"
advapi32.dll
"
, CharSet
=
CharSet.Auto)]
public
static
extern
int
LogonUser(String lpszUserName,
String lpszDomain,
String lpszPassword,
int
dwLogonType,
int
dwLogonProvider,
ref
IntPtr phToken);
[DllImport(
"
advapi32.dll
"
, CharSet
=
System.Runtime.InteropServices.CharSet.Auto, SetLastError
=
true
)]
public
extern
static
int
DuplicateToken(IntPtr hToken,
int
impersonationLevel,
ref
IntPtr hNewToken);
/**/
///
<summary>
///
输入用户名、密码、登录域判断是否成功
///
</summary>
///
<example>
///
if (impersonateValidUser(UserName, Domain, Password)){}
///
</example>
///
<param name="userName">
账户名称,如:string UserName = UserNameTextBox.Text;
</param>
///
<param name="domain">
要登录的域,如:string Domain = DomainTextBox.Text;
</param>
///
<param name="password">
账户密码, 如:string Password = PasswordTextBox.Text;
</param>
///
<returns>
成功返回true,否则返回false
</returns>
public
bool
impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token
=
IntPtr.Zero;
IntPtr tokenDuplicate
=
IntPtr.Zero;
if
(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
ref
token)
!=
0
)
{
if
(DuplicateToken(token,
2
,
ref
tokenDuplicate)
!=
0
)
{
tempWindowsIdentity
=
new
WindowsIdentity(tokenDuplicate);
impersonationContext
=
tempWindowsIdentity.Impersonate();
if
(impersonationContext
!=
null
)
return
true
;
else
return
false
;
}
else
return
false
;
}
else
return
false
;
}
public
void
undoImpersonation()
{
impersonationContext.Undo();
}
#endregion
前台事例:
【用户登录域】示例
#region
【用户登录域】示例
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default6.aspx.cs
"
Inherits
=
"
Default6
"
%>
<!
DOCTYPE html PUBLIC
"
-//W3C//DTD XHTML 1.0 Transitional//EN
"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"
>
<
html xmlns
=
"
http://www.w3.org/1999/xhtml
"
>
<
head id
=
"
Head1
"
runat
=
"
server
"
>
<
title
>
ASP.NET模拟登录验证
</
title
>
</
head
>
<
body
>
<
form id
=
"
form1
"
runat
=
"
server
"
>
<
div
>
账户:
<
asp:TextBox ID
=
"
UserNameTextBox
"
runat
=
"
server
"
></
asp:TextBox
><
br
/>
密码:
<
asp:TextBox ID
=
"
PasswordTextBox
"
runat
=
"
server
"
></
asp:TextBox
><
br
/>
域名:
<
asp:TextBox ID
=
"
DomainTextBox
"
runat
=
"
server
"
></
asp:TextBox
><
br
/>
<
asp:Button ID
=
"
OKButton
"
runat
=
"
server
"
OnClick
=
"
OKButton_Click
"
Text
=
"
Button
"
/></
div
>
</
form
>
</
body
>
</
html
>
=========================================================================
protected
void
OKButton_Click(
object
sender, EventArgs e)
{
string
UserName
=
UserNameTextBox.Text;
string
Domain
=
DomainTextBox.Text;
string
Password
=
PasswordTextBox.Text;
UserLoginForDomain CheckUserLogin
=
new
UserLoginForDomain();
if
(CheckUserLogin.impersonateValidUser(UserName, Domain, Password))
Response.Write(UserNameTextBox.Text
+
"
is OK
"
);
else
Response.Write(UserNameTextBox.Text
+
"
is Error
"
);
}
#endregion
查看全文
相关阅读:
安装oracle11g 并且开启APEX 安装
爬虫基础
深度优先广度优先
部署静态页面到nginx
Nginx 实现端口转发
五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Please select Android SDK解决办法
android与JS交互,互相调用方法,跳转到网页
Android:你要的WebView与 JS 交互方式 都在这里了
Android与js交互拍照上传资料
原文地址:https://www.cnblogs.com/Hdsome/p/1227575.html
最新文章
hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别
制作.bat文件运行指定目录的.bat或者exe
git修改远端服务器地址
linux文件组、权限等
安装TestNG在eclipse中的插件
Python+selenium环境搭建
selenium:chromedriver与chrome版本的对应关系
用字体制作小图标
dede使用方法----调用列表页的分页功能
dede使用方法----调用列表的标签使用及说明
热门文章
让框架的高度自适应
优秀的博文推荐
dede使用方法----调用导航
dede使用方法----如何去掉dede自带的版权
给<tr>标签添加边框
一句话解决大多数兼容问题
当浏览器窗口大小改变时事件
jquery插件-table转Json数据插件
Django And Django-Rest-Framework 异常记录
imooc 生鲜超市笔记
Copyright © 2011-2022 走看看