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

webservice开发技术说明书

发布时间:2020-12-17 00:25:19 所属栏目:安全 来源:网络整理
导读:1?前言 在 NC 环境中发布 WS 服务以及创建 SEI ( service?endpoint?interface )最便捷的方式就是使用 NC?Eclipse 插件的相关功能。使用前需要手动安装 NC?WebService?Eclipse 插件: nc.uap.mde.wstools_1.0.0.jar。以下描述的发布过程假设该插件已成功安

1?前言

NC环境中发布WS服务以及创建SEIservice?endpoint?interface)最便捷的方式就是使用NC?Eclipse插件的相关功能。使用前需要手动安装NC?WebService?Eclipse插件:nc.uap.mde.wstools_1.0.0.jar。以下描述的发布过程假设该插件已成功安装且java工程为NC?Module?Project工程。

2?发布服务

NC中发布WS服务可简单描述如下:

n?由Java接口创建WSDL文件。

n?如果Java接口中引用了自定义的Java类,需要创建相应的XSD文件。

n?在模块下的UPM文件中配置WS服务。

n?如果需要WS安全方面的考虑还需要配置ws-security.xml文件,及相关的证书管理配置。

注意:使用NCEclipse插件配置UPM文件的过程中,可以自动创建WSDL文件和XSD文件。这样比单独创建WSDL/XSD文件便捷。

2.1?创建WSDL文件

n?在Eclipse?IDE中选中要发布为WS服务的接口文件,点击右键弹出功能菜单。选择WS?Tools下的Genarate?WSDL菜单项,如图:

n?选择后弹出WSDL创建面板,设置WSDL文件的保存路径。

??勾选Cascade复选框:表示如果该接口引用到了其它的自定义Java类,则一并生成相应的XSD文件。

??勾选force复选框:表示如果该路径下已存在同名的WSDL文件,则覆盖。

如图:

n?点击“Finish”按钮完成WSDL文件的创建工作。

2.2?创建XSD文件

关联类的XSD文件即可以在1.1创建WSDL文件的过程中级联创建,也可以单独创建。过程如下:

n?在Eclipse?IDE中选中准备创建XSDJava类文件,点击右键弹出功能菜单。选择WS?Tools下的Genarate?XSD菜单项,如图:?

n?选择后弹出XSD创建面板,设置XSD文件的保存路径。

??勾选Cascade复选框:表示如果该类引用到了其它的自定义Java类,则一并生成相应的XSD文件。

??勾选force复选框:表示如果该路径下已存在同名的XSD文件,则覆盖。如图:

?

n?点击“Finish”按钮完成XSD文件的创建工作。

2.3?配置UPM文件

配置UPM文件的工作量并不大,可手工也可使用NC?工具。下面对使用NC?工具配置的流程加以描述,其中涉及到NC?WebService?Security方面的规范知识可参考《WebService安全配置》文档。

n?在Eclipse?IDE中选中要发布为WS服务的接口文件或实现类,点击右键弹出功能菜单。选择WS?Tools下的Publish?Web?Service菜单项后弹出UPM文件选择窗口,如图:

n?点击“Next”后进入如下配置页,最下面的interfaceimpl是两个必填项。指明要发布为ws服务的接口和实现类。“设置属性”栏中的各项属性是NC组件正常发布所需要的配置项,这里不做介绍,可参考组件发布的相关文档。需要指出的是如果配置了组件名则这个组件名就是WS的服务名,否则系统会将下页配置的Address做为WS的服务名。

n?点击“Next”后进入如下配置页。

ExtensionClass:指定了Server启动时部署这个组件的处理类。

Web?Service?Style:暂时只能选NC?specify

如果勾选了“Create?WSDL?if?not?exist”项,则当未创建wsdl?xsd文件时会自动创建。

Wsdl?location:指出wsdl?文件的位置。

Address:是WS服务地址,结构为“/+服务名。

Interceptor:拦截器。

n?点击“Next”进入WebService?安全配置项。

勾选web?service?安全配置项。

选择KeyStore,从modules/uapws/config/ws-security.xml中选择。默认的是该文件中crypto?id为default的KeyStore。

decKS:解密需要的KeyStore

encKS:加密需要的KeyStore

signKS:签名需要的KeyStore

verifyKS:验证签名需要的KeyStore

n?点击“Next”,进入WebService安全详细信息配置页。

??配置Protect项。如果在上一页的安全配置项中勾选了“要求认证授权”,则在当前的详细信息配置页中需要配置Protect项。如图:

认证组件:如果没有配置,表示使用系统默认的认证器。他为对nc.uap.ws.security.IAuthenticator组件的引用。默认为名称为nc.uap.ws.security.IAuthenticator的组件。

授权组件:如果没有配置,表示使用系统默认的权限机制,他为对nc.uap.ws.security.IAccessController的组件的引用,默认为名称nc.uap.ws.security.IAccessController的组件。

??配置UserToken项。如果在上一页的安全配置项中勾选了“要求输出token”,则在当前的详细信息配置页中需要配置UserToken项。如图:

profile下拉框中点选“UsernameProfile”后出现如下配置页。

配置在信息输出时提供给别人的主体信息,profile表示遵循的SecurityToken规范,目前只支持UsernameProfile。对于UsernameTokenprofile,有属性:user,?password,?cbClass,?cbRef。如果指定了user/password就不需要cbClass,cbRef的配置。user/password表示一种静态的用户名/密码信息提供,而cbClass,cbRef表示一种动态的复杂的用户名密码提供方式。cbClassjavax.security.auth.callback.CallbackHandler的类,cbRefjavax.security.auth.callback.CallbackHandler组件的引用(该描述适合后续的sign,encrypt的描述。

??配置Signature项。如果在上一页的安全配置项中勾选了“要求输出签名”,则在当前的详细信息配置页中需要配置Signature项。如图:

签名确认:勾选此项表示在应答时需要返回请求方的signature,否则不返回请求方的signature

签名用户:从签名对应的KeyStore中选取用于签名的私钥名。

Callback:如果签名用户的获取方式比较复杂不能直接指定而是通过callback方式获取的。则此处需要配置callback项。

Key标识方式:指示签名或加密的key的值应用方式,默认为IssuerSerial

Canonical:指示正规化算法没有设定,默认为,http://www.w3.org/2001/10/xml-exc-c14n#

算法:指定Key的算法。可以不选,此时系统会自动判断算法类型。

签名元素:指定需要签名的信息。

??配置verify项。如果在上一页的安全配置项中勾选了“要求输入签名”,则在当前的详细信息配置页中需要配置Verify项。如图:

如果不存在通信双方互为Server的情况(NC的目前应用基本不存在),建议不要勾选Confirm项。

??配置encrypt项。如果在上一页的安全配置项中勾选了“要求输出加密”,则在当前的详细信息配置页中需要配置encrypt项。如图:

??

加密用户:从加密对应的KeyStore中选取用于加密的密钥名。

用户回调类:如果加密用户的获取方式比较复杂不能直接指定而是通过callback方式获取的。则此处需要配置用户回调类。

Key标识方式:指示签名或加密的key的值应用方式,默认为IssuerSerial

Key加密算法:系统只支持RSA15算法。

算法:加密算法。

加密元素:指定需要加密的信息。

??配置decrypt项。目前没有需要配置的内容。

完成上面的配置后,点击“Finish”按钮,保存配置信息。

3?客户端调用

NCWebService客户端调用需要有服务接口类,可以利用WSDL文件创建服务接口,WSDL文件可以远程获取。

拥有了服务接口后就可以利用API进行客户端对服务端的访问了。

3.1?创建服务接口

注意:使用NCEclipse插件创建JAVA接口的过程中,可以自动创建相关JAVA类文件。这样比单独创建相关JAVA类文件便捷。

3.1.1?创建相关JAVA类文件

n?在Eclipse?IDE中选中要创建JAVA类文件的XSD文件,点击右键弹出功能菜单。选择WS?Tools下的Genarate?Java?Class菜单项,如图:

n?选择后弹出Java类文件创建面板,设置类文件的保存路径。如图:

force复选框表示是否要覆盖该保存路径下的同名文件。

点击“Finish”按钮完成创建工作。

3.1.2?创建JAVA接口

n?在Eclipse?IDE中选中要创建SEIWSDL文件,点击右键弹出功能菜单。选择WS?Tools下的Genarate?Java?Interface菜单项,如图:

n?选择后弹出SEI创建面板,设置SEI文件的保存路径。如图:

cascade复选框:表示是否级联创建相关的Java类文件。

force复选框:表示是否要覆盖该保存路径下的同名文件。

点击“Finish”按钮完成创建工作。

3.2?API使用

可以通过API进行安全特性的配置和控制:

3.2.1?WSS4JConfig

配置的核心类,所有安全属性的配置信息都在里面。每个属性都有get/set方法。现逐一介绍其属性的含义。

??encCryptoId:在NCWebService安全配置文件中,Crypto标签描述了KeyStore的访问信息。CryptoId是Crypto?的唯一标识。encCryptoId标识的Crypto描述了用于加密信息所使用的Key的访问信息。

??decCryptoId:用于解密的Crypto

??signCryptoId:用于签名的Crypto

??verifyCryptoId:用于验证签名的Crypto

??securityToken:安全令牌,类型是SecurityToken,?NC目前只支持UsernameToken

??sign:类型是SignAdvice,描述了签名信息。

??verify:类型是VerifyAdvice,描述了验证签名的信息。

??encrypt:类型是EnryptAdvice,描述了加密的信息。

??decrypt:类型是DecryptAdvice,描述了解密的信息。

??authentication:类型是Authentication,描述了认证信息。

3.2.2?UsernameToken

用于配置进行请求的主体,其属性描述如下:

??user:用户名。

??password:密码。

??nonce:布尔型,是否附带随机数。

??created:布尔型,是否附带Token创建时间。

??callbackHandler:类型是CallbackHandler,获取密码的回调处理类。

??pwType:类型是PwType,密码的类型,包括三种:

ü?PasswordNone:没有密码。

ü?PasswordText:密码是明文形式。

ü?PasswordDigest:密码是摘要形式。

3.2.3?Cryptic

该类是SignAdviceEncryptAdvice的超类。其属性描述如下:

??user:用户名,用来进行私钥签名的key的标识。

??algorithm:加密算法。

??callbackHandler:类型是CallbackHandler,用来获取密码的回调处理类。

??keyIdentifier:类型是KeyIdentifier,指明Key的获取方式。

??parts:类型是List<String>?加密的部分。

3.2.4?SignAdvice

用于保存签名信息,继承了Cryptic,其属性描述如下:

??confirm:布尔型。应答时,是否需要返回请求方的signature。这个属性适合在服务方配置。

??canonicalAlgorithm:规范算法。

3.2.5?EncryptAdvice

用于保存加密信息,继承了Cryptic,其属性描述如下:

??keyEncryptionAlgorithm:Key加密算法类型。

3.2.6?DecryptAdvice

用于保存解密信息。

暂无任何属性。

3.2.7?VerifyAdvice

用于保存校验信息,其属性描述如下:

??confirm:布尔类型。是否需要验证服务方的应答信息中是否包含自己发送请求的signature。这个属性只适合用在请求方配置。

3.2.8?测试用例

public?class?EmployeeServiceClient?extends?AbstractWSTestCase?{

????protected?String?getPort()?{

????????return?"8080";

????}????

????protected?String?getSecurityConfig()?{

????????return?"nc/uap/ws/test/ws-security.xml";

}

//只认证

????public?void?testInsertUT()?{

????????EmployeeService?client?=?getLocator().lookup(EmployeeService.class);

????????Department?dept?=?new?Department();

????????Employee?e1?=?new?Employee();

????????e1.setName("hgy");

????????e1.setAge(30);

????????Employee?e2?=?new?Employee();

????????e2.setName("hgn");

????????e2.setAge(20);

????????Map<String,?String>?f?=?new?HashMap<String,?String>();

????????f.put("aaa",?"f-aaa");

????????f.put("bbb",?"f-bbb");

????????dept.setFeature(f);????????

????//设置用户名密码

????????WSS4JConfig?wss4jContext?=?new?WSS4JConfig();

????????wss4jContext.setSecurityToken(new?UsernameToken("admin",?"uapws"));

????????((Client)?client).setWSS4JConfig(wss4jContext);

????????Department?obj?=?client.insert(new?Employee[]?{?e1,?e2?},?dept);

????????assertTrue(obj.getEmployees().length?==?2);

????????assertTrue(obj.getEmployees()[0].getName().equals("hgy"));

????????assertTrue(obj.getEmployees()[0].getAge()?==?30);

????????assertTrue(obj.getFeature().size()?==?2);

????????assertTrue(obj.getFeature().get("aaa").equals("f-aaa"));

????}

//进行签名的安全示例

????public?void?testInsertSign()?{?????

????????WSS4JConfig?wss4jContext?=?new?WSS4JConfig();

????????wss4jContext.setSecurityToken(new?UsernameToken("admin",?"uapws"));

???//默认采用了UsernameToke中的用户名密码信息访问私钥签名

????????wss4jContext.setSignAdvice(new?SignAdvice());

???????((Client)?client).setWSS4JConfig(wss4jContext);????…

????}

????//加密

????public?void?testInsertEnc()?{?????…

???????//设置用于加密的信息

????????WSS4JConfig?wss4jContext?=?new?WSS4JConfig();

????????wss4jContext.setSecurityToken(new?UsernameToken("admin",?"uapws"));

????????wss4jContext.setEncryptAdvice(new?EncryptAdvice("uapws"));

????????((Client)?client).setWSS4JConfig(wss4jContext);…

????}

//同事签名加密

????public?void?testInsertSignEnc()?{????…

??????WSS4JConfig?wss4jContext?=?new?WSS4JConfig();

????????wss4jContext.setSecurityToken(new?UsernameToken("admin",?"uapws"));

????????wss4jContext.setSignAdvice(new?SignAdvice());

????????wss4jContext.setEncryptAdvice(new?EncryptAdvice("uapws"));…

????}

}

而后台服务会根据配置,自适应的签名/加密或者强制加密签名。

(编辑:李大同)

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

    推荐文章
      热点阅读