在下面的文章中,我们会介绍应用如何利用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是一套非常成熟和完整的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的平台进行管理和控制。
当应用使用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对用户的访问请求作出更为细化的授权判定。
用户可以对应用中的资源所作的操作在TAM中叫做Action。TAM本身带有17种默认得Action定义,例如:Add、Browse、Control、 Delete、Delegate、Modify、Create、Read等。
为了满足应用开发的要求,应用开发人员可以在TAM中定义自己应用需要的Action定义,例如:Access、Forward、Pass等。
Protected Object Space是一个逻辑的、能够反映被保护资源的结构定义。例如:对于Web服务器来说,它上面的资源就是每个静态或者动态的页面;对于操作系统来说,它上面的资源就是一些重要的文件、TCP端口等。对于应用来说,Protected Object Space实际上应该根据具体的应用资源结构来定义,它可以是数据库中的某个表,或者应用系统的某个纪录等,这些资源结构的定义是一种逻辑上的定义,定义的对象可以实际存在,也可以完全不存在,它可以只是一种虚拟的定义。
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,通过这些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和相应的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进行应用的开发 #### TAM的结构简介 TAM(IBM Tivoli Access Manager)作为一款先进的安全管理解决方案,其核心功能在于提供统一的认证与授权服务,尤其适用于需要高度安全性的企业级应用。...
在实际应用中,Tam通常与构建工具(如Webpack、Rollup)和模块打包器结合使用,形成完整的前端开发解决方案。通过集成Tam,开发者可以更专注于业务逻辑,而不必过于担忧资源管理和优化的问题。 在压缩包文件`tam-...
4. **API接口设计**:RESTful API设计是后端开发的重要部分,用于前后端分离的应用架构。Python中的Flask-Restful或Django Rest Framework可以帮助快速构建API接口。 5. **Web服务器**:部署应用时,需要配置和管理...
综上所述,"TAM-version-fullstack" 项目很可能是基于 Python 的全栈 Web 开发项目,使用了诸如 Django 或 Flask 的后端框架,配合前端技术如 React 或 Vue.js,利用 Git 进行版本控制,可能还有 Docker 和 CI/CD ...
3. **TAM 集成**:WebLogin 模块通过特定的 API 或 SDK 与 TAM 进行交互,获取或更新用户的授权信息。TAM 可能提供了基于 SSO(单点登录)的机制,使得用户在成功登录一次后,可以访问其他与 TAM 集成的应用程序,...
- **高度可定制**:提供丰富的 API 和开发工具,允许企业根据自身需求定制功能和服务。 - **兼容性**:与多种操作系统、数据库和应用服务器兼容,确保能够在现有的 IT 基础设施中平滑运行。 #### 四、TAM Base 的...
- **DSAPI**:使用Domino服务器API进行身份验证。 **Names.nsf人员组织库跟LDAP配置对应关系**: - **人员信息同步**:确保Portal中的用户信息与OA系统的用户信息保持一致,可以通过手动同步或使用TIMIDI工具实现...
标题“tam_fullstack_project”暗示着这是一个全栈项目,很可能是一个综合性的软件开发实例,用于构建一个多运输系统。描述中的“多运输”可能是指该系统涵盖了多种交通方式,如公交、地铁、出租车等,旨在提供一个...
我只是简单地游览了后端开发和api设计。 因此,目前尚无计划在此基础上托管/构建一个完整的Web应用程序,但是任何人都可以自由使用/修改此项目以供自己使用。 安装 作为运行此应用程序的先决条件,您需要至少在...
### Java 通用注解和 API 规范 #### 概述 《Java 通用注解和 API 规范》文档详细介绍了...通过遵循这些注解和API规范,开发者可以构建出高度可互操作、可扩展的服务组件,从而更好地支持SOA环境下的应用程序开发。
- 提供统一的API来管理应用安全 TAP的主要组件包括: 1. Trusted Execution Environment(TEE):这是TAP的核心,提供了一个隔离的安全执行环境,用于运行可信应用(Trusted Applications)。 2. Trusted ...
TamHTML解析器是一款专门用于处理和解析HTML的JavaScript库,尤其适用于前端开发中对HTML文档进行操作和分析的场景。它的主要功能是将HTML字符串转换为可操作的DOM树结构,便于开发者进行元素查找、修改、添加或删除...
在实际应用中,这种技术广泛应用于游戏开发、电影特效和虚拟现实场景。JavaScript的实现意味着这个模拟可以在各种设备上运行,包括桌面电脑、移动设备甚至Web应用。然而,由于JavaScript的性能限制,大型或复杂的3D...
6. **开发与实现**:对于开发者来说,理解并掌握OCR算法、OpenGL图形编程以及在线平台的API接口是必要的。这涉及到图像处理、机器学习、网络通信等多个领域的知识。 7. **优化与挑战**:尽管OCR技术已经相当成熟,...
在Java或Android开发中,我们常常需要与服务器进行数据交互,如获取JSON数据、上传文件或者下载资源。这个工具包可能会提供GET、POST等基本的HTTP请求方法,同时可能还支持异步请求、设置超时、处理Cookie等功能。...
1. **ART-Pi**: ART-Pi 是一个集成了高性能处理器和丰富接口的开发平台,通常用于物联网(IoT)、机器人、自动化和嵌入式系统开发。它支持实时操作系统,如RT-Thread,以确保任务的高效、可靠执行。 2. **ulog**: ...
`elasticdump`是由Tony Tam 开发的一款命令行工具,它基于Node.js实现,能够高效地将Elasticsearch索引、类型或整个集群的数据转换为JSON格式的文件,或者从JSON文件中恢复到Elasticsearch。它提供了灵活的选项来...