在下面的文章中,我们会介绍应用如何利用IBM Tivoli Access Manager(以下简称TAM)作为用户认证和授权控制的平台,最为高效地把TAM和应用开发集成起来,从而为应用的开发、部署和运行提供一个高效可靠的安全平台。

随着电子商务时代的到来,各种各样的业务已经从传统的面对面的运营方式变成了通过互联网,直接通过网络进行交易的运营方式。因此,如何更好地控制用户对后台关键应用的访问就显得尤为重要。

TAM的结构简介

tam的授权模型

如上图所示,TAM的授权模型来自于业界标准的ISO10181的授权模型,在TAM的授权模型中,包括有几个重要的功能模块,他们分别是用户注册库、策略管理器、对象库和规则、策略执行者。下面我们分别对这几个主要的功能模块进行详细的介绍。

用户注册库

TAM中的用户注册库需要建立在一个标准的LDAP服务器上,他现在支持业界中几乎所有的LDAP服务器,例如:IBM Directory Server、Lotus Domino Directory、MS Active Directory、SUN iPlanet Directory Server、Novell eDirectory;或者任何支持标准LDAP协议的LDAP服务器。

TAM中的用户注册库主要用于存储用户的相关信息,例如:用户名、用户密码、邮件地址、电话、通信地址等和用户相关的信息。

策略管理器

TAM中的策略管理器是TAM的核心部分。它负责和其它TAM功能模块的通讯工作,其中主要包括以下几个功能

  • 维护TAM中的主要信息(例如:用户信息、对象库(Protected Object Space)、访问控制列表(ACL)等)
  • 保存着其它TAM功能模块的位置信息

对象库和规则


 策略执行者

TAM中的策略执行者是用户访问TAM后台资源的唯一渠道,所有用户访问后台资源的请求都必须通过策略执行者,策略执行者会对用户的身份进行确认,同时还会对用户的访问请求作授权的判断。如果访问请求得到批准的话,策略执行者会把用户的请求转发给后台的应用,并且把后台应用答复给用户的信息转发给用户。如果访问请求没有被批准的话,他会直接拒绝用户的访问请求,并且不做任何访问请求的转发。

TAM和应用的集成

TAM和应用集成的优势

应用和TAM的集成,或者说在应用开发时利用TAM的安全平台来做应用安全部分的开发,有以下几点优势:

  • 首先,TAM是一套非常成熟和完整的3A系统(认证、授权和审计),它可以和几乎所有的Web服务器和Web应用服务器进行无缝的集成。
  • 其次,TAM提供了一套完整的、应用开发时需要的用户认证、授权和管理API,(包括有C/C++和JAVA语言),因此在应用开发时可以直接使用这些API进行用户认证和操作授权的操作,或者TAM系统的管理工作。
  • 第三,TAM有一套完整的用户管理、资源管理的体系架构。应用开发时,可以直接使用TAM提供的这套管理体系作为应用的用户管理和资源管理架构,而不需要自己另外建立一套这样的架构。
  • 第四,TAM有一套完整的用户授权判定机制,他所提供的功能非常完备。包括了授权控制中的每一个细节,应用开发时,可以通过API直接使用TAM提供的这套授权判定机制作为自己应用的授权判定模块。
  • 第五,和TAM的其他模块(例如:WebSEAL、AMOS、AMBI等)的共同使用可以为企业建立一套最为完整的安全框架结构,从操作系统的每个文件、每个TCP连接到Web服务器上的一个静态或者动态页面,到Web应用服务器上的每个Servlet,甚至于Servlet中提供的某个方法,或者更为细化的授权判定,都可以通过TAM提供的安全平台来实现。

总而言之,通过和TAM的集成,应用开发的步骤可以大大地加快,应用的安全结构会变得更为安全和可靠。应用开发时只要关注和业务相关的部分就可以了,安全部分的内容可以全部交给TAM的平台进行管理和控制。

TAM和应用集成的结构

当应用使用C或者JAVA语言作为应用的开发语言时,TAM可以使用用户的认证和授权API来对用户作身份的确认和访问权限的判定。

当和Web环境共同存在时,为了更好地保护Web环境中的资源以及和后台应用的集成,WebSEAL发挥了极大的安全控制功能,作为一个策略执行者,WebSEAL位于所有Web服务器和Web应用服务器之前,他会处理用户身份的认证和URL级别的访问授权判定。同时,还会根据后台web服务器和web应用服务器的要求,把用户的相关信息(例如:用户的邮件地址、用户的联系方式等信息)通过HTTP Header传到后台的Web服务器和Web应用服务器,以便后台应用的操作。后台应用(例如:WebSphere Application Server上的Servlet)可以从HTTP Header中获得用户的信息,然后利用TAM提供的授权API对用户的访问请求作出更为细化的授权判定。

建立自己应用的Action

用户可以对应用中的资源所作的操作在TAM中叫做Action。TAM本身带有17种默认得Action定义,例如:Add、Browse、Control、 Delete、Delegate、Modify、Create、Read等。

为了满足应用开发的要求,应用开发人员可以在TAM中定义自己应用需要的Action定义,例如:Access、Forward、Pass等。

建立自己应用的Protected Object Space

Protected Object Space是一个逻辑的、能够反映被保护资源的结构定义。例如:对于Web服务器来说,它上面的资源就是每个静态或者动态的页面;对于操作系统来说,它上面的资源就是一些重要的文件、TCP端口等。对于应用来说,Protected Object Space实际上应该根据具体的应用资源结构来定义,它可以是数据库中的某个表,或者应用系统的某个纪录等,这些资源结构的定义是一种逻辑上的定义,定义的对象可以实际存在,也可以完全不存在,它可以只是一种虚拟的定义。

在应用中使用TAM提供的认证和授权API

TAM提供了全面的用于应用开发的认证和授权API,应用的开发人员可以使用这些认证和授权API作为系统的用户认证和访问授权架构。当对用户访问权限作判定时,它完全遵循TAM的授权模型提出授权请求并且得到授权判定的最终结果。下面是几个用于用户认证和授权管理的方法,

PDPrincipal whoIsIt = new PDPrincipal( _who , _pwd);

- 获得用户信息

PDPermission whatTheyWant = new PDPermission( _object, _perms );

- 获得用户想要访问的对象和相应的操作

boolean haveAccess = whoIsIt.implies(whatTheyWant);

- 提出授权判定的请求(谁<_who>想对对象<_object>作操作<_perms>),并且获得授权判定的结果

在应用中使用TAM提供的管理API

TAM除了提供了用于用户身份认证和访问授权管理的API以外,还提供了功能全面的TAM管理API,通过这些API可以对TAM的系统进行全方面的管理,例如:用户的添加、对象库中信息的修改、访问控制列表(ACL)的修改等功能。应用开发人员甚至可以利用TAM提供的管理API开发一套自己特有的TAM系统的管理工具,以方便对TAM提供更为灵活和客户话的管理工具。下面是几个用于管理用户的方法,TAM提供的管理API多达几百个,可以完全覆盖所有的TAM管理工作。

  • PDUser.createUser
  • PDUser.importUser
  • PDUser.deleteUser
  • PDUser.listUsers

一个和应用集成的配置实例

下面我们介绍一个TAM和应用开发集成的配置实例,在这个实例里,我们会使用到TAMeb、WebSEAL、IBM HTTP Server、WebSphere Application Server。在这个环境中,我们使用4台硬件服务器,分别作为以上4个应用的运行环境。下面是这4台硬件服务器的配置例子:

一个利用TAM提供的API进行开发的程序实例

在安装完TAM和相应的ADK模块之后,在TAM的安装目录下会有几个C和JAVA的实例可以作为参考。另外,TAM的电子文档里有4本书专门介绍如何利用TAM提供的API进行应用开发,以及TAM提供的API的使用方法。

下面是利用TAM提供的API做的一个Servlet,可以作为大家应用开发的一个参考。

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import java.net.URL;
import com.tivoli.pd.jutil.PDContext;
import com.tivoli.pd.jutil.PDMessage;
import com.tivoli.pd.jutil.PDMessages;
import com.tivoli.pd.jutil.PDRgyUserName;
import com.tivoli.pd.jutil.PDRgyGroupName;
import com.tivoli.pd.jutil.PDException;
import com.tivoli.pd.jadmin.*;
import com.tivoli.pd.nls.pdbjamsg;
import com.tivoli.mts.*;public class AMServlet extends HttpServlet {//**//** init( ServletConfig config )//**public void init( ServletConfig config ) throws ServletException   {super.init( config );}//**//** destroy()//**public void destroy() {super.destroy();}//**//** doGet( HttpServletRequest req, HttpServletResponse resp ) //**public void doGet( HttpServletRequest req, HttpServletResponse resp )throws ServletException, IOException {processRequest( req, resp );}//**//** doPost( HttpServletRequest req, HttpServletResponse resp ) //**public void doPost( HttpServletRequest req, HttpServletResponse resp )throws ServletException, IOException {processRequest( req, resp );}//**//** processRequest( HttpServletRequest req, HttpServletResponse resp )//**public void processRequest( HttpServletRequest req, HttpServletResponse resp )throws ServletException, IOException {PrintWriter pw = resp.getWriter();pw.println( "<HTML>" );pw.println( " <BODY>" );try{PDMessages msgs = new PDMessages();String adminName = "sec_master";String adminPwd = "passw0rd";char [] adminPassword = adminPwd.toCharArray();String configURLStr = "file:///E:/WebSphere/AppServer/java/jre/PdPerm.properties";String rgySuffix = "dc=zk,dc=com";Locale locale = new Locale("ENGLISH", "US");URL configURL = new URL(configURLStr);pw.println("<H1>Tivoli Access Manager Admin API Example</H1>");pw.println("<H3>Creating a context...\n</H3>");pw.println("<BR>");PDContext ctxt = new PDContext (locale,adminName,adminPassword,configURL);pw.println("<H3>Listing the users...\n</H3>");pw.println("<BR>");ArrayList userList = PDUser.listUsers(ctxt,PDUser.PDUSER_ALLPATTERN,PDUser.PDUSER_MAXRETURN,false,msgs);pw.println(userList);pw.println("<BR>");pw.println("<H3>Showing the user sec_master...\n</H3>");pw.println("<BR>");String name="sec_master";PDUser pdUser = new PDUser(ctxt,name,msgs);pw.println("<H3>Account Valid: </H3>" + pdUser.isAccountValid());pw.println("<BR>");pw.println("<H3>Account Description: </H3>" + pdUser.getDescription());pw.println("<BR>");pw.println("<H3>Account Registry Name: </H3>" + pdUser.getRgyName());pw.println("<BR>");pw.println("<H3>Account ID: </H3>" + pdUser.getId());pw.println("<BR>");pw.println("<H3>Account First Name: </H3>" + pdUser.getFirstName());pw.println("<BR>");pw.println("<H3>Account Last Name: </H3>" + pdUser.getLastName());pw.println("<BR>");pw.println("<H3>Account Policy: </H3>" + pdUser.getPolicy());pw.println("<BR>");pw.println("<H3>Account Group: </H3>" + pdUser.getGroups());pw.println("<BR>");pw.println("<H3>Account PD User: </H3>" + pdUser.isPDUser());pw.println("<BR>");pw.println("<H3>Account SSO: </H3>" + pdUser.isSSOUser());pw.println("<BR>");}catch (PDException e){}catch (Exception e){}String _who="sec_master";String _object="/Management";String _pwd="passw0rd";String _perms="T";PDPrincipal whoIsIt = new PDPrincipal( _who , _pwd.toCharArray() );PDPermission whatTheyWant = new PDPermission( _object, _perms );boolean haveAccess = whoIsIt.implies(whatTheyWant);pw.println("<H1>Tivoli Access Manager Authorization API Example</H1>");pw.println( "[" + _who + ", " + _object + ", " + _perms + "] --> " );if (haveAccess){pw.println( "Access is Granted: " );}else{pw.println( "Access is Denied: " );}pw.println( " </BODY>" );pw.println( "</HTML>" );}}

如何利用TAM的API进行应用的开发相关推荐

  1. python 根据地址求经纬度 谷歌_利用google的API获取世界城市经纬度(python实现)

    google API 需要 --. #-*- coding: utf8 -*- from xml.dom import minidom import urllib2, urllib #这个KEY本来是 ...

  2. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 订单系统

    背景 前面几天,我们一起封装了 BigONE 提供的"身份验证"与"资产账户"部分的 API. 如何利用BigOne的API制作自动化交易系统 – 身份验证 如 ...

  3. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 获取账户资产

    背景 前几天我们介绍了如何使用 BigONE Developer API V2 来获取身份令牌的方法「如何利用BigOne的API制作自动化交易系统 – 身份验证」.一旦获取了身份令牌,我们就可以在网 ...

  4. python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...

    上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...

  5. 利用Bing翻译API简单的实现一个翻译工具

    常见的翻译服务提供商有Google和微软,它们的在线翻译地址如下: Bing翻译: http://www.microsofttranslator.com/?FORM=R5FD Google翻译: ht ...

  6. html约束验证的例子,HTML5利用约束验证API来检查表单的输入数据的代码实例

    HTML5对于表单有着极大程度的优化,无论是语义,小部件,还是数据格式的验证.我猜你肯定会以浏览器兼容作为借口不愿意使用这些"新功能",但这绝不应该成为使你停滞不前的原因,况且还有 ...

  7. 百度地图利用位置提供服务器,利用百度地图API获取当前位置信息的实例

    利用百度地图API可以做很多事情,个人感觉最核心也是最基础的就是定位功能了.这里分享一个制作的JS可以实现登录网页后定位: var map; var gpsPoint; var baiduPoint; ...

  8. php查询ip归属地api接口_【php】利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地...

    本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地>(点击打开链接)为姊妹篇,只是后端编程语言换成了php. 做出同样的效果,打开页面,得 ...

  9. php新浪获取ip接口,【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地...

    [php]利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地 本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地 ...

最新文章

  1. Mongodb集群 - 副本集内部选举机制
  2. Linux/Windows配置stm32免费开发环境详细流程
  3. mysql 查询表总行数字段_mysql中怎么查询表中的字段个数
  4. FreeMarker四种变量的用法
  5. python将16进制字符串转换为整数_Python 16进制与字符串的转换
  6. 亲测!这本 Python 书销量超过13W+原来是这样
  7. JavaScript实现随机抽奖功能
  8. Linux socks5转http
  9. CSS特效——图片扫描
  10. 生成二维码并将Bitmap保存成图片
  11. android 魔力锁屏源码,打造最炫手机锁屏桌面 10款安卓魔力锁屏主题推荐
  12. 安卓root本质操作
  13. IKEA宜家社会责任验厂标准
  14. eclipse介绍与使用
  15. Sprint(第二天11.15)
  16. Jenkin 配置 Gerrit Trigger
  17. cocos creator 动态设置精灵图片
  18. 你真的了解CSS包含块么?
  19. 软件著作权如何申请?
  20. Vue中ECharts配置和使用自定义主题(超简单,包教会)

热门文章

  1. MX_Player_Pro_专业精简版AC3/DTS/EAC3 By.SOLDIER-就要应用网91apps.cn
  2. matlab数据变成一列数据,matlab读取excel表格列数据-matlab导入excel后,怎么把数据提取成一列?...
  3. 日语语法(四):形容词
  4. 粗糙集理论应用的实例
  5. 一对同居男女同一天的日记
  6. Chrome插件开发-右键菜单开启页面编辑
  7. 微信公众号自定义菜单如何添加特殊符号?
  8. 解决Google浏览器首页被2345网站劫持
  9. Matplotlib 常用可视化操作
  10. git commit -m text /git commit -s -m /git commit -a -m /git commit -a -s