加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用Soap头自定义身份验证

发布时间:2020-12-16 22:36:28 所属栏目:安全 来源:网络整理
导读:使用Soap头自定义身份验证 ??? 在intranet场景下,Windows身份验证动作良好,并且开发人员可以在自身域中对用户进行身份验证。如果在Web.config文件中将WEB服务设置为WINDOWS身份验证模式,那么必须为每一个用户创建一个本地几户或域账户。对于拥有大量用户
使用Soap头自定义身份验证
??? 在intranet场景下,Windows身份验证动作良好,并且开发人员可以在自身域中对用户进行身份验证。如果在Web.config文件中将WEB服务设置为WINDOWS身份验证模式,那么必须为每一个用户创建一个本地几户或域账户。对于拥有大量用户的应用程序来说,这不是一个实用的解决方案,美工豕对于Internet上的应用程序来说这是不可能实现的。对Internet而言,可能需要根据结构化查询语言(SQL)数据库来执行自定身份验证和授权。在这种情况下应该向WEB传递自定凭据(例如用户名或密码),并让WEB服务处理身份验证和授权。
??? 这时候我可以用一种比较简便的方法--使用SOAP头。WEB服务消费者在SOAP头中添加用户ID和密码信息,WEB服务方法会检索这些信息,并使用这些信息来执行自定义的验证从而调用相应的服务 。

下面是一个简单的例子:

服务器端:
using ?System;
?System.Web;
?System.Web.Services;
?System.Web.Services.Protocols;

?System.Security.Principal;
namespace ?test2
{
????
/// ? <summary>
????
?Summary?description?for?Service1
????
</summary>
????[WebService(Namespace? = ? " http://tempuri.org/ )]
????[WebServiceBinding(ConformsTo?
?WsiProfiles.BasicProfile1_1)]
????[ToolboxItem(
false )]
????
public class ?Service1?:?System.Web.Services.WebService
????{
????????
???????
??ValidateUser?valiUser? new ?ValidateUser();//一定要是public访问类型。

???????


????????
//
????????[SoapHeader( valiUser )]
????????[WebMethod]
????????
string ?GetAuthority()
????????{
????????????
?Msg "" ;
????????????valiUser.ValiHeader(
out ?Msg);
????????????
return ?Msg;
????????}
????}
????
???? ?ValidateUser:System.Web.Services.Protocols.SoapHeader
????{
????????
// 用户名和密码
???????? private ?username;
????????
?password;
????????
?UserName
????????{
????????????
get ?{? ?username;?}
????????????
set ?{?username? ?value;?}
????????}
????????
?PassWord
????????{
????????????
?password;?}
????????????
?{?password? bool ?ValiHeader( ?ReturnMsg)
????????{
????????????
?flag? ;
????????????
if ?(UserName? == admin && ?PassWord? )
????????????{
????????????????flag?
true ;
????????????????ReturnMsg?
You?Are?Successfully ;
????????????}
????????????
else
????????????{
????????????????ReturnMsg?
You?Are?Failted ?flag;
????????}
????}

?客户端:(我是写在一个按钮下面,向浏览器输出)
protected void ?Button2_Click( object ?sender,?EventArgs?e)
????????{
????????????Service1?service?
?Service1();
????????????ValidateUser?valiUser?
?ValidateUser();
????????????valiUser.UserName?
;
????????????valiUser.PassWord?
;
????????????service.ValidateUserValue?
?valiUser;
????????????Response.Write(service.GetAuthority());
????????}

输出为:“ You?Are?Successfully”
注意:要使用SOAP头实现一个自定义身份验证方案,还必须在WEB服务的web.config文件中禁用其他的身份验证类型,如下所示:
<configuration>
??? <system.web>
??? ?? <authentication mode="None"/>
??? </system.web>
</configuration> ??

当使用SOAP头传输凭据时,惟一必须解决的重要问题就是安全了,不过我们可以将SOAP头中身份信息进行强加密来解决这个问题。
这将在我下一片文章中出现。

转载:http://www.cnblogs.com/seebook/archive/2007/07/07/809599.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读