在下面的文章中,我们会介绍应用如何利用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>" ); } }
相关推荐
Rocky Linux 8.10内核包
内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。
内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。
__UNI__DB9970A__20250328141034.apk.1
rust for minio
国网台区终端最新规范
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
一个简单的机器学习代码示例,使用的是经典的鸢尾花(Iris)数据集,通过 Scikit-learn 库实现了一个简单的分类模型。这个代码可以帮助你入门机器学习中的分类任务。
pyqt离线包,pyqt-tools离线包
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
SQL常用日期和时间函数整理及在sqlserver测试示例 主要包括 1.查询当前日期GETDATE 2.日期时间加减函数DATEADD 3 返回两个日期中指定的日期部分之间的差值DATEDIFF 4.日期格式转换CONVERT(VARCHAR(10),GETDATE(),120) 5.返回指定日期的年份数值 6.返回指定日期的月份数值 7.返回指定日期的天数数值
GSDML-V2.3-Turck-BL20_E_GW_EN-20160524-010300.xml
T_CPCIF 0225-2022 多聚甲醛.docx
《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
蚕豆脱壳机设计.zip
台区终端电科院送检文档
Y6一39一No23.6D离心通风机 CAD().zip
django自建博客app
台区终端电科院送检文档
非开挖水平定向钻机动力头装置设计.zip