快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐场网址所有平台_龟发之家论坛



五、ws-security与wcf

且慢些加密我们的soap-header,要加密很简单,直接应用对称或者非对称算法把用户名密码加个密然后传输至葡京娱乐场网址所有平台办事端解密不就完了。

是,是可以这么做,但你有没有想过,假如你的客户端应用的是Java,办事端应用的是.net或者php怎么办?对方能用java api来解密吗?

这时,我们就要应用wcf了,一路来看,什么叫wcf.

5.1 wcf

Industry Standard WS-Security

Sun Microsystems and Microsoft jointly test Metro against WCF toensure that Sun web service clients (consumers) and web services (producers) doin fact interoperate with WCF web services applications and vice versa. Thistesting ensures that the following interoperability goals are realized:

lMetro web services clients can access and consume WCF web services.

lWCF web services clients can access and consume Metro web services.

Sun provides Metro on the Java platform and Microsoft provides WCFon the .NET 3.0 and .NET 3.5 platforms. The sections that follow describe theweb services specifications implemented by Sun Microsystems in Web ServicesInteroperability Technologies (WSIT) and provide high-level descriptions of howeach WSIT technology works.

这边呈现了一个名词叫:Metro,这是一个基于JAXWS实现ws-security的标准框架,而Metro支持wcf协议。

现在知道我为什么让大年夜家用jax-ws的意图了吧。

5.2 Metro

Metro支持的ws-security有以下几种:

üUsername Authentication with Symmetric Key

üUsername Authentication with Password Derived Keys

üMutual Certificates Security

üSymmetric Binding with Kerberos Tokens

üTransport Security (SSL)

üMessage Authentication over SSL

üSAML Authorization over SSL

üEndorsing Certificate

üSAML Sender Vouches with Certificates

üSAML Holder of Key

üSTS Issued Token

üSTS Issued Token with Service Certificate

üSTS Issued Endorsing Token

真够多的啊,我们看第一种,便是我们说的基于用户名密码的ws-security,而且这个soap报文中的用户名与密码是被加密的。

5.3 QoS

要写相符WCF的webservice必要在webservice中引入QoS观点。

什么是QoS,从字面上理解便是qualityof service,它是一个很广的观点,它主如果把传统的一个webservice从架构上再分成7个部分,即你的webservice必要包孕下面7个主要的方面:

üAvailability

üPerformance

üReliability

üRegulatory

üSecurity

üIntegrity

üAccessibility

QoS所处的位置:

看到这边大年夜家头不要大年夜,我们一路来看,到底怎么来实现QoS呢?

5.4 应用QoS中的security

我们应用QoS中的security来实现我们的soap报文的加密与传输,下面给出一个soap报文片段:

MIIBvT...BnesE0=

hS6nfYE9axFgay+gorMEo0I4GfY=

OULe5mAxLwYibommo1Ui/...1gvtagYQ=

5.5 ws-policy

若何天生上面这个soap报文的呢?

此时,你的webservice必要引入一个policy描述,即ws-policy,下面给出一个policy的片段:

即,在布署webser葡京娱乐场网址所有平台vice时,必要把空上policy和wsdl一路编译成带有QoS的webservice。

5.6 后话

在这个教程中,我不会带出从头至尾若何天生ws-policy和响应的带有QoS的Webservice以及相关的客户端。

由于大年夜家假如把jax-ws的前五天根基教程看完后,加上我这后三天的教程,完全可以自己有能力去用Metro来自己实现相关的soap报文加密。

这属于异常easy的事,搞个2-3天就能实现。

同时,一样平常的项目,能够真正用到经由过程soap报文通报用户名与密码或者经由过程handler的,并不多,一样平常都是用http://login.do?username=xxx&pwd=xxx这种拍屁股的做法在传用户名与密码,顶多加个https了不得了。

假如当你碰着真正做到了带有QoS的webservice时,自己结合我这8天教程,自己搞一下Metro就能搞得定,其实不可了,再来找我。

着末,给大年夜家保举3样器械:

1.Tomcat6扔了吧,用7了

2.下载netbean7.0.1(此中自带tomcat7)

3.应用glassfish3(支持J2EE6规范),一个缩小免费版的weblogic

假如你对QoS有兴趣,应用上述3样器械会简化你的进修历程。

转自:http://blog.csdn.net/lifetragedy/article/details/7212130

三、书写客户端

package ctsjavacoe.ws.fromjava;

import javax.xml.namespace.QName;

import javax.xml.ws.Response;

import javax.xml.ws.BindingProvider;

import javax.xml.ws.Service;

import java.net.URL;

public class AuthHelloClient {

private static final String WS_URL =

"file:D://wspace/JaxWSCl葡京娱乐场网址所有平台ient/w葡京娱乐场网址所有平台sdl/AuthHelloImplService.wsdl";

private static final String S_URL =

"http://localhost:8080/JaxWSSample/AuthHelloService?wsdl";

public static void main(String[] args) throws Exception {

URL url = new URL(WS_URL);

QName qname = new QName("http://fromjava.ws.ctsjavacoe/",

"AuthHelloImplService");

Service service = Service.create(url, qname);

AuthHello port = service.getPort(AuthHello.class);

BindingProvider bp = (BindingProvider) port;

bp.getRequestContext().put(

BindingProvider.USERNAME_PROPERTY,

"tomcatws");

bp.getRequestContext().put(

BindingProvider.PASSWORD_PROPERTY, "123456");

bp.getRequestContext().put(

BindingProvider.ENDPOINT_ADDRESS_PROPERTY,

S_URL);

String rtnMessage = port.say("MK");

Sy葡京娱乐场网址所有平台stem.out.println("rtnMessage=====" + rtnMessage);

}

}

关键语句我已经用血色标粗。

要点:

1)根据wsdl create出来一个Service,这边必要一个wsdl,我们弗成能用http://这样形式的wsdl,由于我们此时没有用户名和密码,假如我们应用的是http://这样形式的wsdl直接会抛“授权认证掉足”,是以我们应用jax-ws在编译办事端时天生的本地wsdl

2)应用BindingProvider输入用户名与密码,着末再应用BindingProvider输入真正的我们办事真个wsdl即:http://localhost:8080/JaxWSSample/AuthHelloService?wsdl

下面来看运行效果:

有意输错用户名与密码,我们输入:

bp.getRequestContext().put(

BindingProvider.USERNAME_PROPERTY,

"tomcatws");

bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "12345");

再来运行一下:

可以看到,假如用户名密码没有输对,根本无法经由过程认证,即连http连接都无法精确建立,这样我们的安然程度极大年夜的前进了。

四、终极安然宝鉴

4.1 加装SSL通信

即实现办事端与客户真个HTTPS通信,这一样平常可以包管传输历程中你的soap报文不会被拦截

4.2 报文加密

我们的用户名与密码是嵌在soapheader中的,因此明文要领存在的,假如一旦被推截,将造成劫难性的结果,是以我们必要将我们的soap报文中header部分进行加密,这便是ws-security。

您可能还会对下面的文章感兴趣: