首页 > 编程知识 正文

java官方认证(java实现ssh远程访问)

时间:2023-05-05 00:16:46 阅读:69924 作者:3062

项目开发经常使用web服务,但在使用web服务时,考虑到web服务是一个安全问题,一组用户名和密码很容易防止调用未授权的用户。

一.网络凭证方式

为System.Net命名空间提供网络凭证。 这将确保在网络上提供证书,并且只有获得该证书的用户才能访问相应的服务。 在NetworkCredential中,在IIS中设置发布web服务的服务器的名称,以及登录服务器并调用web服务的用户名和密码。

在调用web服务时设置Credential属性并分配上述Credential证书。 这样,只能使用提供的用户名和密码调用web服务,其他用户则无法访问。 这样可以防止调用web服务。

对于主机名、用户名和口令,B/S可以在webconfig中配置;对于C/S,可以使用APP应用程序配置文件。 以下以C/S为例进行说明。 首先,提供服务器的网络证书,并使用WebRequest验证连接是否成功。 当然,为了确保用户名和密码等安全,可以通过对其进行加密等手段来确保安全。

///

//服务器的网络证书/

///

publicstaticnetworkcredentialmycred (

{ string loginuser=properties.settings.default.username; //用户名

stringloginpsw=properties.settings.default.userpsw; //密码

stringloginhost=properties.settings.default.hostname; //主机名可以是IP地址或服务器名

networkcredentialmycred=newnetworkcredential (loginuser,loginPSW,loginHost ); //networkcredentialmycred=newnetworkcredential (' username ',' 123456 ',' yourip ' ); //'username ',' 123456 ',' yourservername '

returnmyCred;

///

//验证与服务器的连接是否成功,如果连接成功,则返回TRUE///

//服务器web服务URL

///

公共身份验证(字符串URL )。

//定义局部变量

string url=G_Url; //服务器验证只通过机器验证

try{if}(MyWebresponse==null ) ) ) ) ) ) )。

{

webrequestmywebrequest=webrequest.create (URL ); 基于//URL创建连接请求

myweb request.credentials=my cred (; //获得验证的证书是最重要的语言

myWebRequest.Timeout=20000; //单位为毫秒

myweb response=myweb request.getresponse (; //返回连接成功时的信息

}

}无法连接到}catch(webexceptionwex )//服务器。 服务器错误或用户名和密码可能错误

{ if (myweb响应!=空值销毁

{

myWebResponse.Close (;

myweb响应=null;

}返回假;

} Catch (执行Ex ) ) ) ) )。

{ if (myweb响应!=null )

{

myWebResponse.Close (;

myweb响应=null;

}返回假;

}finally{

}返回真;

} privatestaticws _ we basic.ws _ webasicwebasic=null; //实现中国WS_Webasic.WS_Webasic

///

///WS_Webasic初始化//

公共静态ws _ we basic.ws _ webasicws _ we basic

获取{ if (webasic==null )如果we basic为空,则可以通过重新实例化来缩短验证时间并提高效率

//we basic=newz EDI.ws _ we basic.ws _ we basic (); /

/wsBool = Credential(webasic.Url);//URL改为服务器地址 2009-02-25 哭泣的发夹 chhuic@163.com

wsBool =Credential(G_Url);if (wsBool == true)  //服务器连接验证通过

{

webasic= new WS_Webasic.WS_Webasic();//实例化

webasic.Credentials = MyCred();//得到服务器连接凭证,这样该WebService可以放心的连接了

}

}returnwebasic;

}

}

注:

(1)必须引用 System.Net;

(2)对WebService发访问,在IIS里取消匿名访问权限,若允许匿名访问,就没有必须提供验证凭证了。

二、

在第一种方法的基础上对WebService里的方法进行加密,这里面方法很多,下面提供一种比较常用的方法。在调用方法时多提供两个参数用户加密解密用(当然了提供几个参数看自己的需要而定)。比如有个WebService方法是根据顾客ID获取数据库中的顾客的详细资料为GetCustomerDetailByCustomerID(string custID);如果只提供一个参数,则很容易被别人访问调用,从而顾客资料很容易被别人获取,因此我们对这个方法进行加密GetCustomerDetailByCustomerID(string scustID,string custID,ecustID);这样,只有提供正确的scustID与ecustID这二个参数才能成功调用这个方法,而对于这二个参数scustID与ecustID,则可以通过加密方法生成一个字符串,如scustID='C39134558',ecustID='C39223525',只有这二个参数满足一定的条件时才算验证通过,而对于参数来说,我们也可以提供一个验证,如果scustID里的值C39134558,前面三位必须是C39,紧跟5位13455则相加后的值18进行位操作如,对值18加一个因子,如1,则出现以下的运行:(18+1)%11==8,这样只有最后一位为8才算这个参数值是符合要求的,所以随便输入一个参数如:C39134556,则因为不符合要求,所以验证不能通过。在这里即使二个参数scustID='C39134558',ecustID='C39223525'都对了,则还需要通过这二个参数的进一步的验证才能算成功。至于这二个满足什么要求,一种是可以采用现有的加密机制,也可以自己写一个加密类来袜。 上面只是举一个简单的例子。

通过上面的二个步骤,则可以实现比较安全的WebService调用了。

三、通过通过SOAP Header身份验证

1、我们实现一个用于身份验证的类,文件名MySoapHeader.cs

MySoapHeader类继承自System.Web.Services.Protocols.SoapHeader。且定义了两个成员变量,UserName和PassWord,还定义了一个用户认证的函数ValideUser。它提供了对UserName和PassWord检查的功能。

usingSystem.Web.Services;usingSystem.Web.Services.Protocols;///

///MySoapHeader 的摘要说明///

public classMySoapHeader:SoapHeader

{publicMySoapHeader()

{TODO: 在此处添加构造函数逻辑//}public stringUserName;public stringPassWord;public bool ValideUser(string in_UserName, stringin_PassWord)

{if ((in_UserName == "zxq") && (in_PassWord == "123456"))

{return true;

}else{return false;

}

}

}

2.下面我们创建WebService.asmx,WebService.cs代码如下:

usingSystem;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Services;usingSystem.Web.Services.Protocols;///

///WebService 的摘要说明///

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]public classWebService : WebService

{publicWebService()

{//如果使用设计的组件,请取消注释以下行//InitializeComponent();

}public MySoapHeader header; 定义用户身份验证类变量header

[WebMethod(Description = "用户验证测试")]

[SoapHeader("header")]//用户身份验证的soap头

public string HelloWorld(stringcontents)

{//验证是否有权访问

if(header.ValideUser(header.UserName, header.PassWord))

{return contents + "执行了";

}else{return "您没有权限访问";

}

}

}

3.客户端,创建个Default.aspx

usingSystem;usingSystem.Configuration;usingSystem.Data;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.HtmlControls;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;public partial class_Default : System.Web.UI.Page

{protected void Page_Load(objectsender, EventArgs e)

{

com.cn1yw.WebService test= new com.cn1yw.WebService();//web引用(改成您自己的)

com.cn1yw.MySoapHeader Header = new com.cn1yw.MySoapHeader();//web引用创建soap头对象(改成您自己的)//设置soap头变量

Header.UserName = "zxq";

Header.PassWord= "123456";

test.MySoapHeaderValue=Header;//调用web 方法

Response.Write(test.HelloWorld("我是强"));

}

}

四、通过集成windows身份验证

使用 NTML 或 Kerberos 对客户端进行身份验证。

1、将web服务程序设为集成windows身份验证

2、客户端web引用代码

Test.WebReference.Service1 wr = new Test.WebReference.Service1(); //生成web service实例

wr.Credentials = new NetworkCredential("guest","123"); //guest是用户名,该用户需要有一定的权限

lblTest.Text = wr.Add(2,2).ToString(); //调用web service方法

该方案的优点是比较安全,性能较好,缺点是不便于移植,部署工作量大。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。