OSB (Oracle Service Bus)上代理服务的安全设置(一)
就安全而言,最常见的两个概念,就是Authentication和Authorization。在OSB(Oracle Service)里,如果你对你的Proxy Service什么都没设置过,那么一般来说,你除了使用HTTP进行传输,没有身份验证(Authentication),没有权限校验(Authorization)。
如果你想做多一些安全的约束,例如,你想给外网系统调用你的服务,不想让谁都可以调用你的服务,那么,最简单的方式,你可以做两件事:
1、HTTP Basic身份验证
该选项要求客户端调用服务时需要输入身份信息(Basic验证是在HTTP层面的事情),密码走的是Base64加密(其实不算加密),服务器拿到用户名密码后在服务器上的Realm上验证。这个Realm默认的时候就是OSB/WLS底下管理的内置的一个LDAP,我们通常启动WebLogic的那个帐号就是这个LDAP里面的帐号。
可以看到,除了HTTP Basic,还可以选择客户端证书或者Custom的验证,这些相对复杂一些,本文不再深入讲了。
2、权限校验
默认的情况下,代理服务是Everyone都可以调用的。有了身份验证,系统知道和确认了当前调用人是谁,你就可以进一步约束哪些用户可以调用哪些服务。下图是进入这部分设置的第一步界面:
然后,在“Transport Access Control”部分可以点击你的代理服务:
可以看出,默认的做法是“Group: everyone”可以访问。点击“Add Conditions”,你就可以定制自己的逻辑了。例如“User=?”,或者“Role=?”,或者“Group=?”的属于可以访问,如下图:
在这几个页面,你还可以看到,OSB提供一种所谓Custom Authentication的设置,即通过XPath在报文中找出Username和Password来做身份验证。因为如果不是这种Custom的方式的话,用户名和密码是保存在HTTP的头上的(你可以看看HTTP协议规范)。通过Custom的方式,客户端的代码可以更加简单,因为用户名和密码可以是某方法的参数,这些参数可以用XPaht找到。如下图:
3、HTTPS传输
你或许担心,密码明文或者传输,那可怎么办呢?简单的做法就是使用HTTPS进行传输,设置也很简单,上面的第一个图就有这个选项。
但是使用起来,这选项并不是那么简单的,还有不少事情要做,这些都是所谓证书的问题。
如果你使用正式购买的证书,安装在OSB服务器上,一般“正式”的证书,其根已经在各个客户端上安装且信任,服务调用时不会再有信任的问题。如果你不想花这部分前,你想自己搞证书服务器或者使用自己给自个签名的证书,也可以,但是你就要把证书也安装在各个客户端上,让各个客户端信任你的这个证书。这种方式不同的客户端的使用方法,设置方法可能不同,这是比较烦的地方。当然,也可用编程的方式,每次调用服务时用API来做信任证书的事情,但这个也不简单。
4、WS-Security
这是高级活,其基本要求也是有证书(PKI那套),使用起来有不少的功能,包括部分加密,签名,反抵赖等等,令人羡慕。不过用起来也不简单,有时间再详谈罗。