社区
C#
帖子详情
webservice 被winForm应用程序调用时 的 安全处理问题
haha20
2008-07-09 10:15:50
如题:
本人做了一个 webservice 但是 在 winForm 中 调用时 不知道 怎么控制他们的访问!
在 webConfig 中怎么配置? 请高手指点! 谢谢!
...全文
229
10
打赏
收藏
webservice 被winForm应用程序调用时 的 安全处理问题
如题: 本人做了一个 webservice 但是 在 winForm 中 调用时 不知道 怎么控制他们的访问! 在 webConfig 中怎么配置? 请高手指点! 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
haha20
2008-08-03
打赏
举报
回复
谢谢 各位! 不好意思 结贴 有点迟了
haha20
2008-07-09
打赏
举报
回复
下午测试一下 哈哈!
m777
2008-07-09
打赏
举报
回复
6楼方法,正解!
haha20
2008-07-09
打赏
举报
回复
谢谢!
ericzhangbo1982111
2008-07-09
打赏
举报
回复
可以应用WebService的Soap 头实现。也就是说可以利用Soap头传递验证的信息,比如用户名,密码等等。
首先从客户端看,可以对其应用有一个直观的了解。代码如下
private void Button1_Click(object sender, System.EventArgs e)
{
AuthHeader auth=new AuthHeader();
WebServices webService=new WebServices();
auth.UserName=this.txtName.Text.Trim();
auth.Password=this.txtPwd.Text.Trim();
webService.authHeader=auth;
string rtStr=webService.GetPassword();
this.txtReturn.Text=rtStr;
}
解释一下,AuthHeader为前面提及的Soap头的实现,其定义如下:
public class AuthHeader:SoapHeader
{
public string UserName;
public string Password;
}
继续看看WebServices是如何实现的,代码如下:
public class WebServices : System.Web.Services.WebService
{
public AuthHeader authHeader;
[SoapHeader("authHeader")]
[WebMethod( Description="This method will return the sensitive data")]
public string GetPassword()
{
if(authHeader.UserName.Equals("user") &&authHeader.Password.Equals("pwd"))
{
return "pwd";
}
return "Invalid Authentication ";
}
}
可以发现,加入了一个AuthHeader公共成员。这个可以供调用者传输验证信息。另外重要的一点是SoapHeader属性,它明确了Soap头。具体可以参见MSDN。
在GetPassword()中,可以加入你的代码。它第一步就是验证信息,如果验证成功,继续完成你的事情,如果不成功,则退出。
HimeTale
2008-07-09
打赏
举报
回复
这个关注
我也想知道
ericzhangbo1982111
2008-07-09
打赏
举报
回复
asp.net中使用基于角色的身份Forms验证,大致分为四个步骤
1.配置系统文件web.config
<system.web>
<authentication mode="Forms" >
<forms name=".yaoCookies" loginUrl="/duan/Manage/login.aspx" protection="All"
timeout="20" path="/" />
</authentication>
</system.web>
<forms>标签中的name表示指定要用于身份验证的 HTTP Cookie. 默认情况下,name 的值是 .ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中.一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的.
<forms>标签中的loginurl指没有经过身份验证的用户将会自动的定向到loginurl所指向的路径. 如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.其中用System.Web.Security.FormsAuthentication.RedirectFromLoginPage ()方法实现重定向.
<forms>标签中的timeout和path,是提供了身份验证票写入到Cookie过期时间和默认路径
2.在受保护的文件夹如Manage下创建一web.config文件,内容如
<configuration>
<!--指定对整个Manage目录的访问权限-->
<system.web>
<authorization>
<!--多个角色用,分隔-->
<allow roles="admin,user"/>
<deny users="*" />
</authorization>
</system.web>
<!--也可控制某个页的权限
<location path="AnnounceList.aspx">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*" />
</authorization>
</system.web>
</location>
<location path="ConfigInfo.aspx">
<system.web>
<authorization>
<allow roles="users"/>
<deny users="*" />
</authorization>
</system.web>
</location>
-->
</configuration>
注:此配置内容也可以加入到系统的web.config文件中,注意加入位置:
........
</system.web>
<location path="Manage/AnnounceList.aspx">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
3.登录页
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #cccccc; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%">//登录按钮
private void Button1_Click(object sender, System.EventArgs e)
{
//实体类AdminUserVO对应AdminUser用户表。
AdminUserVO adminUserVO = new AdminUserVO();
adminUserVO.Uname = UserName.Text.Trim();
adminUserVO.Upwd = UserPwd.Text.Trim();
adminUserVO.LastIP = HttpContext.Current.Request.UserHostAddress;
adminUserVO.LastTime = DateTime.Now;
bool flag = (new LoginDAO()).Chk(adminUserVO);
if (flag)
{
//非角色验证时可以用这句:
//System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text.Trim(),false);
//创建角色验证信息,把role信息写入到UserData中
SetLoginCookie(adminUserVO,adminUserVO.Roles.ToLower());
HttpContext.Current.Response.Redirect("Main.aspx");
}
else
{
HttpContext.Current.Response.Write("登录失败");
}
}
</DIV>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #cccccc; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 88.76%; HEIGHT: 203px">//SetLoginCookie方法
public static void SetLoginCookie(AdminUserVO u, string roles)
{
//建立身份验证票对象
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1,u.Uname, DateTime.Now, DateTime.Now.AddMinutes(30), false,roles,"/");
//加密序列化验证票为字符串
string hashTicket = FormsAuthentication.Encrypt (ticket) ;
HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
HttpContext.Current.Response.Cookies.Add(userCookie);
}
</DIV>
FormsAuthenticationTicket参数说明:
FormsAuthenticationTicket(
int version, //设为1,版本号由系统自动提供
string name, //用户标示,获取与身份验证 Cookie 关联的用户名
DateTime issueDate, //Cookie 的发出时间, 设置为 DateTime.Now
DateTime expiration, //获取 Cookie 过期的日期/时间
bool isPersistent, //是否持久性(根据需要设置,若是设置为持久性,在发出cookie时,cookie的Expires设置一定要设置),如果已发出持久的 Cookie,则返回 true。否则,身份验证 Cookie 将限制在浏览器生命周期范围内。
string userData, //获取存储在 Cookie 中的应用程序定义字符串,这里用上面准备好的用逗号分割的role字符串
string cookiePath // 返回发出 Cookie 的路径。注意,窗体的路径设置为"/",这要同发出cookie的路径一致,因为刷新cookie要用这个路径。由于窗体区分大小写,这是为了防止站点中的 URL 的大小写不一致而采取的一种保护措施。
);
4.Global.asax.cs
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #cccccc; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%">protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpApplication app = (HttpApplication) sender;
HttpContext ctx = app.Context ; //获取本次Http请求的HttpContext对象
if (ctx.User != null)
{
if (ctx.Request.IsAuthenticated == true) //验证过的一般用户才能进行角色验证
{
System.Web.Security.FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity ;
System.Web.Security.FormsAuthenticationTicket ticket = fi.Ticket ; //取得身份验证票
string userData = ticket.UserData;//从UserData中恢复role信息
string[] roles = userData.Split (',') ; //将角色数据转成字符串数组,得到相关的角色信息
ctx.User = new System.Security.Principal.GenericPrincipal (fi, roles) ; //这样当前用户就拥有角色信息了
}
}
}</DIV>
注:如果使用HttpModule的话,此处代码应该加入在AuthenticateRequest事件中。
haha20
2008-07-09
打赏
举报
回复
同时 windows 程序怎么来 提供身份 说明!
haha20
2008-07-09
打赏
举报
回复
谢谢!
调用 我知道 ,但是我是想怎么控制 他们访问我的webSErvice 也就是怎么验证 他们的访问身份,因为我的webservice 地址可能很多人都知道的 ,
ericzhangbo1982111
2008-07-09
打赏
举报
回复
你在winform中添加web引用就可以了、
工程右键-添加web引用
选择你作的webservice
然后你就可以用了
记得using 你的webservice;
华为荣耀recovery1.0
源码链接: https://pan.quark.cn/s/a4b39357ea24 This directory contains a script ('makefsdata') to create C code suitable for httpd for given html pages (or other files) in a directory. There is also a plain C console application doing the same and extended a bit. Usage: htmlgen [targetdir] [-s] [-i]s targetdir: relative or absolute path to files to convert switch -s: toggle processing of subdirectories (default is on) switch -e: exclude HTTP header from file (header is created at runtime, default is on) switch -11: include HTTP 1.1 header (1.0 is default) if targetdir not specified, makefsdata will attempt to process files in subdirectory 'fs'.
光纤耦合器Matlab模拟.rar
光纤耦合器Matlab模拟.rar
ModbusDoctor软件
官网下载地址:需墙:https://www.kscada.com/modbusdoctor.html 使用非常简单,并且免费、免安装 Modbus Doctor(强烈推荐) 下载地址:搜索 “Modbus Doctor” 官网或 GitHub 界面现代化,支持中文,操作和 Modbus Poll 很像
数据中心光伏-储能-数据中心容量优化配置研究(Matlab代码实现)
内容概要:本文围绕“光伏-储能-数据中心”系统的容量优化配置展开研究,旨在通过构建数学模型并结合Matlab编程实现,对园区内光伏发电、储能设备与数据中心算力负荷之间的多能互补关系进行协同优化。研究综合考虑可再生能源出力的波动性、储能系统的充放电特性以及数据中心的动态用电需求与算力调度特性,建立以最小化综合成本、降低碳排放强度、提升能源自给率等为目标的多目标优化模型,并采用先进的智能优化算法(如粒子群、灰狼、鲸鱼等)进行求解,从而确定光伏装机容量与储能系统配置的最优方案。文中提供了完整的Matlab代码实现流程,涵盖数据预
处理
、模型构建、算法求解与结果可视化全过程,属于综合能源系统与信息基础设施深度融合的前沿交叉课题。; 适合人群:具备电力系统、能源工程、自动化或计算机等相关专业背景,熟悉Matlab编程与基本优化算法原理,从事新能源利用、绿色数据中心、综合能源系统规划与低碳调度等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握光伏-储能-数据中心耦合系统的建模思路与多能流协同机制;② 学习基于Matlab的多目标容量优化配置方法与智能算法应用技巧;③ 为工业园区、数字经济园区及绿色数据中心的能源系统规划、节能减排与可持续运行提供科学决策依据和技术解决方案。; 阅读建议:建议结合所提供的Matlab代码,深入理解目标函数设计、约束条件设定及算法实现细节,可通过调整负荷参数、改变气候数据、引入新的优化目标或约束条件等方式进行拓展性实验,以深化对系统特性的认知并提升实际科研与工程应用能力。
2026年数学建模竞赛暑期培训通知(1).pdf_QQ浏览器文档瘦身.pdf
2026年数学建模竞赛暑期培训通知(1).pdf_QQ浏览器文档瘦身.pdf
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章