中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 安全
Cams:一个经典、优美、概念清晰的基于Java的集中式认证和授权实现
作者:未知 时间:2005-07-24 21:24 出处:JR 责编:chinaitpower
              摘要:Cams:一个经典、优美、概念清晰的基于Java的集中式认证和授权实现

Cams:一个经典、优美、概念清晰的基于Java的集中式认证和授权实现


[pre]Cams站点: www.cafesoft.com

翻译整理:胡拥军 hu.yong.jun@ctgpc.com.cn  2003-05-13


==================================================================================================
一.介绍    2
使用Cams进行集中访问管理    2
Cams服务器    3
安全域    4
访问控制服务    5
认证服务    7
Cams代理    8
Cams代理类型    8
Web单点登录(SSO)    8
二.与实际应用快速集成    10
步骤1 - 配置安全域注册    11
步骤2 - 配置系统安全域    12
步骤3 - 配置mydomain安全域    14
步骤4 - 配置Cams Web代理    15
步骤5 - 测试    15
==================================================================================================


======== 
一.介绍
========

    Cafesoft访问管理系统(简称Cams)是一个易于使用的、可靠的和经济的安全控制平台,它集中地控制、管
理和监控对受到保护的网络应用和数据的访问。管理员决定谁获得对系统资源的访问,Cams执行这个策略,并在
日志中记录结果,被Cams保护的资源可以驻留在内联网、外联网或互联网上。与在每一个应用本身中构建客户的
访问控制系统相比,Cams通过集中的应用安全管理和访问,使得站点更安全、更好管理。集中安全控制方式降低
了开发和管理的成本,缩短了产品进入市场的周期,提高了安全性和用户满意度。

    作为Cams管理员,你需要一些关于Cams是如何组织和如何工作的基本知识,这样你就能配置Cams的访问控制、
认证和审计。本章对Cams作总体介绍,如何管理Cams服务器、安全访问和代理,请参考其它章节。
使用Cams进行集中访问管理

    Cams是一个集中访问管理方案,在Cams中,分布的代理将安全判断委托给集中的授权机制??Cams服务器。Cams
设计来保护任何虚拟类型资源,包括:Web页面、文件、数据源和EJB等等。当代理发出访问控制请求后,Cams服务
器中的访问控制服务判断是否授权或拒绝对请求资源的访问,然后请求代理执行该决定。

    图1展示了一个可能的Cams部署。在该部署中,用户1试图访问位于2个不同Web服务器上的资源,每个Web服务
器都有一个Cams Web代理,代理把访问控制和认证请求委托给中心Cams服务器。用户2试图通过Java客户应用或
Applet访问一个应用服务器,该服务器中有Servlet、EJB和数据源,应用服务器有一个内置的Cams应用服务器代
理,它也把访问控制和认证请求委托给中心Cams服务器。[/pre] 

[pre]图1 - 使用Cams进行集中访问管理

    如上所示,Cams在中心Cams服务器执行访问控制策略和登录配置。Cams服务器还集中进行用户活动日志记录
和安全管理。虽然图1所示的使用图形用户界面发出请求的是实实在在的用户,但要记住的是,用户也可能是一台
计算机,例如,用户可能是商业伙伴的订单系统,它在你的站点自动地下订单。
Cams服务器

    Cams的核心是Cams服务器,它有一些互相操作的高层的安全访问,包括:

1.    访问控制访问 - 授权或拒绝对资源的访问
2.    认证访问 - 验证用户标识,并为用户建立一个会话,直到用户登出或闲置超时
3.    会话访问访问 - 向代理提供用户的认证信息
4.    会话控制服务 - 控制对会话的修改和关闭

    Cams服务器既是策略服务器,又是认证服务器,它处理访问控制和认证请求。Cams服务器所提供的服务可以在
3个逻辑层次上组织,如图2所示:[/pre] 

[pre]图2 - Cams服务的逻辑分层

    网络适配器层能让Cams服务器在不同的TCP/IP端口上提供服务,并允许客户端使用不同的协议。服务提供层
提供安全服务,如认证和访问控制;这个抽象的层为Cams的扩展提供了灵活性,Cams几乎可以保护任何网络资源,
但使用的却是同一个服务提供层服务。

    Cams代理通常在TCP/IP端口上访问安全服务,而象让Cams服务器终止等管理服务和访问控制在另外的端口上
可用,还可以通过防火墙,限制对某个Cams服务器的访问。当然,你也可以用Cams来实现Cams代理的认证和访问
控制。

    Cams引擎层有安全域服务。安全域服务提供了一个根据管理的需要划分资源和用户的方式。什么是安全域?阅
读下节。

======
安全域
======

    在Cams安全模型中,资源和用户账号都是被某个安全域所拥有,这使得访问管理可以根据组织和物理界限分区。
不同的安全域被不同的个人、部门和公司配置和管理。

    每个安全域有它自己的服务,包括:

1.    访问控制服务 - 根据一个访问控制策略授权或拒绝对受保护资源的访问
2.    认证服务 - 验证用户标识,创建用户会话,直到用户登出或闲置超时
3.    会话访问服务 - 向代理提供用户认证的信息
4.    会话控制服务 - 控制会话的修改和关闭
5.    会话管理服务 - 管理经过认证的用户会话,如果闲置超时则使其过期
6.    服务管理服务 - 通过编程API,使客户安全域的特定服务可以使用或重用

    前4个安全域服务就是服务提供层中服务的临摹,后2个服务(会话管理和服务管理)是安全域中特有的。作为
管理员,要特别在意访问控制服务和认证服务,因为它们有很多配置工作。下面介绍各个安全域的访问控制服务和
认证服务是如何组织的,以便更好理解如何配置它们。
访问控制服务

    访问控制服务位于安全域中,它有其处理管道(pipeline),称为访问控制管道。这个管道包含有可插入的访
问控制阀序列。默认地,第一个访问控制阀是记录请求的日志器,最后一个控制阀(也称为基阀)使用特定于安全
域的访问控制策略来授权或拒绝访问。安全域中的访问控制服务的组件图如图3所示:[/pre] 

 
[pre]图3 - 安全域访问控制服务结构

============
访问控制策略
============

    每个安全域使用一个访问控制策略来保护它所拥有的资源,访问控制策略中包含有权限集和一个访问控制规则
库。

====
权限
====

    权限关联了一个资源集(用资源模式定义),资源集有2个可能的动作:用于授权或拒绝对资源访问的访问控
制规则或访问控制所要委托的安全域。一个特殊的系统安全域收到所有的访问控制请求,并把其中的大多数委托给
一个或多个其它的安全域,这些安全域是你要配置的。系统安全域还认证Cams系统管理员和代理,保护系统级资源。
访问控制规则

    Cams的访问控制规则控制对资源的访问,通过以下条件:

·    经过认证用户角色
·    远程主机/IP地址
·    安全的连接(如SSL/TLS)
·    日期/时间
·    认证方法

    这些规则可以根据需要客户化,并用“AND”、“OR”和“NOT”操作符结合起来构成可重用的、结构化的表达
式。另外,使用编程API可以创建新的访问控制规则类型,并插入到任何Cams访问控制策略中。例如,你也许想创
建一个访问控制规则,它基于数据库中的值,如某个账户存款数量,来授权访问资源。
访问控制请求/响应

    Cams代理发送一个访问控制请求给Cams服务器,检查用户对资源的访问。访问控制请求包含有请求资源的信息
(资源类型、资源唯一标识和一个或多个请求动作)。例如,一个用户通过Web浏览器访问http://www.cafesoft.com/index.html,
那么就有以下资源请求参数:

1.    资源类型:http
2.    资源标识:http://www.cafesoft.com/index.html
3.    动作:GET

    访问控制请求还包含其它参数,这些参数对决定是否授权访问非常重要:

·    访问资源的客户的IP地址/主机名
·    Cams会话标识(已经认证的用户)
·    客户网络连接是否安全的标志
·    资源提供者的日期/时间

    最终,Cams安全域中访问控制服务要处理访问控制请求,形成访问控制响应,返回给代理。了解更多关于Cams
访问控制服务如何工作,阅读“访问控制服务(Access Control Services)”一节。
认证服务

    每个安全域中都有认证服务,认证服务有其自己的处理管道,称为认证管道。认证管道由可插入的认证阀序列
构成。默认地,第一个认证阀记录认证请求的日志,最后一个认证阀(又称基阀)根据认证请求的信息进行认证。
一个安全域的认证服务的组件构成如图4: [/pre]

[pre]图4 - 安全域的认证服务结构

========
登录配置
========

    每个安全域有它自己的登录配置,说明客户如何认证。登录配置包含登录配置条目,每个条目对应所要认证的
应用。

========
登录模块
========

    每个登录配置条目引用一个或多个登录模块,登录模块让你配置认证是基于哪种用户库(译者注:即Realm),
如LDAP服务器、关系数据库和XML文件,用户库中包含有用户、口令、组和角色信息。Cams提供了很多可配置的登
录模块,它们符合JAAS API,支持LDAP、RDBMS(SQL)和XML用户库。如果有Cams不支持的用户库,你可以创建自
己的登录模块来实现认证。

    更多关于Cams认证服务信息阅读“登录配置(Login Configuration)”一节。
Cams代理

    Cams代理是一个软件组件,它把安全请求委托给Cams服务器。代理的目的是把访问控制请求和认证委托给Cams
服务器,并根据Cams服务器返回的结果执行相应动作。代理的安装和配置与代理所安装的环境有很大关系。
Cams代理类型

    当前,Cams支持Web代理。Web代理安装于web服务器(如apache或Tomcat)中,它执行对以下资源的访问控制
和认证:web页面、cgi-bin文件、servlet和JSP页面等等。Web代理使用每个站点的登录页面提示用户输入认证信
息,然后把认证请求以及获得的用户凭证信息一起委托给Cams服务器。Web代理在特殊的HTTP header中附带上用户
信息,用于支持站点个性化。

    了解如何安装和配置Cams Web代理,阅读“Cams Apache Web代理(Cams Apache Web Agent)”和“Cams Tomcat 
Web代理(Cams Tomcat Web Agent)”文档。
Web单点登录(SSO)

    Web单点登录能让用户在一台服务器上认证,访问其它服务器(或同一台物理服务器上的虚拟主机)的资源时
无需再次认证。目前Cams只在单个DNS域以及其子域内支持单点登录。图5示意一个用户访问一个站点的经历,在
这个站点里,每个服务器都实现自己的认证和访问控制,不支持SSO。用户在www.travel.com上认证过了,当它继
续访问www2.travel.com和payment.travel.com上的资源时,它需要在每台服务器上再次认证。[/pre] 

[pre]图5 - 访问一个DNS域内的多个服务器(不支持SSO方式)

    在一个支持SSO的站点上,一旦用户通过认证,它就可以使用同一个DNS域及其子域内的其它服务器。图6示意
该情形。[/pre] 
[pre]图6 - 访问一个DNS域内的多个服务器(支持SSO方式)

    Cams Web代理利用HTTP Cookie支持一个DNS域内的SSO,大多数浏览器默认支持Cookie。了解更多如何配置SSO
信息,阅读“Cams Apache Web代理(Cams Apache Web Agent)”和“Cams Tomcat Web代理(Cams Tomcat Web Agent)”
文档。

======================
二.与实际应用快速集成
======================

    现在你已经安装好Cams了,也看到了Cams evaluator's portal,本文档指导你为你的集成环境快速配置Cams,
该指南的其它部分是详细信息的参考。

    本文档解决最小安装状态下的Cams服务器和Cams Web代理的快速配置问题。本文档假设你成功安装Cams服务器,
并至少部署了一个Cams Web代理。如果你还没有完成该步骤,请阅读“安装指南(Installation Guide)”一节。

    为了配置Cams,你要编辑安全域注册,每个安全域有一个XML注册文件,cams-webagent.conf对应Cams Web代
理的配置。以下步骤指导你如何修改Cams服务器的配置:

1.    配置安全域注册
2.    配置系统安全域
3.    配置mydomain安全域
4.    配置Cams Web代理
5.    测试

    符号变量CAMS_HOME代表你所安装有Cams的目录。

=======================
步骤1 - 配置安全域注册
=======================

    security-domain-registry.xml文件定义了一个Cams服务器中所有安全域。虽然安全域的配置数据的默认存放
位置是CAMS_HOME/conf目录,但可以在CAMS_HOME/conf/cams.conf文件中改变它的位置:
security.domain.registry.factory.params=${cams.home.dir}/conf/domains/security-domain-registry.xml

    我们使用它的默认存放位置。编辑CAMS_HOME/conf/domains/security-domain-registry.xml文件,在Cams发
布包中带有3个配置好的安全域:

·    system - Cams服务器所要求
·    examples - 即刚才看到的Cams evaluation portal 
·    mydomain - 利用该安全域配置用户自己的安全域

    在security-domain-registry.xml文件中,system和examples条目是使能的,而mydomain条目是禁止的,现在
禁止examples,使能mydomain。

 <!-- Register the examples security domain -->
 <security-domain enabled="false">
   <name>examples</name>
   <home>${cams.home}/conf/domains/examples</home>
 </security-domain>
 <!-- Register the mydomain security domain -->
 <security-domain enabled="true">
   <name>mydomain</name>
   <home>${cams.home}/conf/domains/mydomain</home>
 </security-domain>

    禁止一个安全域条目的好处是仍然可以保留安全域的配置数据,要想完全删除一个安全域,比如examples,你
可以在security-domain-registry.xml文件中删除examples条目,同时删除CAMS_HOME/conf/domains/examples目录。

    下面假设你在注册文件中有2个使能的安全域:system和mydomain。

    注意在security-domain-registry.xml文件中顶部的以下参数:

<var name="http.resource.base.id" value="http://localhost:8080"/>
<var name="https.resource.base.id" value="https://localhost:8443"/>
<var name="cams.resource.base.id" value="cams://localhost:9191"/>
<var name="cams.logs.base.dir" value="${cams.home}/logs"/>

    这些参数是该配置文件的变量声明,是代表资源权限的,Cams配置文件中会有很多这样的变量。例如,你也许
要改变localhost为一个实际的值:

<var name="http.resource.base.id" value="http://localhost:8080"/>
<var name="https.resource.base.id" value="https://localhost:8443"/>
<var name="cams.resource.base.id" value="cams://localhost:9191"/> 

修改为:

<var name="http.resource.base.id" value="http://web_agent_hostname:8080"/>
<var name="https.resource.base.id" value="https://web_agent_hostname:8443"/>
<var name="cams.resource.base.id" value="cams://cams_server_hostname:9191"/> 

现在保存该配置文件。

    你可以声明任意数量的配置变量。配置变量是有层次结构的,它们继承自XML文档树中的父节点。变量值可以
修改,并在子节点中有效。当你有一个Web代理,它在每个系统中有不同的权限需求时,这点特别有用。有些配置
变量在所有的服务器中都可用,而有些则随着代理的不同而不同。另外,Cams服务器提供了以下内置配置变量:

·    cams.home.dir - Cams服务器安装位置全路径 
·    cams.domain.dir - 某个安全域的全路径位置 
·    cams.domain.name - 当前安全域名 

    当你了解更多,使用更多权限后,就会发现配置变量特别有用。

=======================
步骤2 - 配置系统安全域
=======================

    你需要修改system安全域条目,该步骤会涉及到关键的安全域配置文件,它们是:

·    access-control-policy.xml 
·    login-config.xml 
·    security-domain.xml 

    几乎所有的安装都要修改前2个文件,security-domain.xml文件也许可以不用改动。在每个安全域中,还可以
发现cams-users.xml文件,该文件是内部的Cams用户库。

    到system安全域目录下,编辑access-control-policy.xml文件。

Linux/UNIX:

cd $CAMS_HOME/conf/domains/system
vi access-control-policy.xml

Windows

cd %CAMS_HOME%\conf\domains\system
notepad access-control-policy.xml 

    <permission-collection type="http">标签为安全域定义HTTP资源权限。下面2个权限把HTTP和HTTPS资源请
求委托给examples安全域。

<!-- Delegate HTTP permissions to the default security domain -->
<permission desc="Delegate all HTTP resource permissions" actions="GET,POST">
     <resource-pattern id="${http.resource.base.id}/*"/>
     <owner id="examples"/>
</permission>
     
<!-- Delegate HTTPS permissions to the default security domain -->
<permission desc="Delegate all HTTPS resource permissions" actions="GET,POST">
     <resource-pattern id="${https.resource.base.id}/*"/>
     <owner id="examples"/>
</permission>

对这2个权限,你要修改:

<owner id="examples"/>

改为:

<owner id="mydomain"/>

    保存文件。这些HTTP资源模式的资源权限都会委托给mydomain安全域。注意<permission-collection type="cams">
标签,该权限集定义了Cams Web代理连接权限,这些权限通常由system安全域自己来处理,不能委托给别人。你会
看到它对访问控制规则的引用:

<acr-ref id="cams agent rule"/>

    在配置文件的访问控制库条目<acr-lib>中,“cams agent rule”条目要求经过认证的Web代理具有cams-agent
角色。打开cams-users.xml用户库文件,看到cams-tomcat-agent代理用户具有cams-agent角色,如果没有该角色,
Tomcat Web代理就无法认证,也不能授权。所有的Cams Web代理都需要类似的用户账号,它们在cams-users.xml文
件中定义。你也可以选用其它的用户库,如LDAP或SQL数据库,你还可以为Web代理定义其它的访问控制规则,如要
求满足特定的条件等等。

    如果你使用的是LDAP或SQL数据库作为用户库,你要修改login-config.xml文件。了解更多,阅读“登录模块”
文档。我们假设使用Cams用户库,它已经为mydoamin配置好了。

===========================
步骤3 - 配置mydomain安全域
===========================

    在发布包中,mydomain安全域将所有的HTTP或HTTPS请求权限授给所有用户,编辑
CAMS_HOME/conf/domains/mydomain/access-control-policy.xml文件。

    在<permission-collection type="http">标签下有:

<!-- Grant GET and POST permission to all HTTP resources -->
<permission desc="HTTP Resource Permissions" actions="GET,POST">
  <resource-pattern id="${http.resource.base.id}/*"/>
  <acr-ref id="granted"/>
</permission>
<!-- Grant GET and POST permission to all HTTPS resources -->
<permission desc="HTTPS Resource Permissions" actions="GET,POST">
  <resource-pattern id="${https.resource.base.id}/*"/>
  <acr-ref id="granted"/>
</permission>

    访问控制规则引用granted规则标识,<acr-ref id="granted"/>,是内置的Cams规则,它把该资源的访问权限
授给所有用户。在这里它应用于所有HTTP和HTTPS请求的根,为例限制mydomain安全域的HTTP请求,首先,定义访
问规则,要求用户具有myrole角色。因此在<acr-lib>和</acr-lib>之间插入以下内容:

<!-- Requires authenticated users to have the "myrole" role -->
<auth-acr id="require myrole">
     <role-constraint>
       <role-name>myrole</role-name>
     </role-constraint>
</auth-acr>

编辑HTTP资源权限,将<acr-ref id="granted"/>改为:

<acr-ref id="require myrole"/>

权限条目看起来象这样:

<!-- Grant GET and POST permission to all HTTP resources -->
<permission desc="HTTP Resource Permissions" actions="GET,POST">
     <resource-pattern id="${http.resource.base.id}/*"/>
     <acr-ref id="require myrole"/>
</permission>

    保存文件。Cams服务器现在要求用户具有myrole角色,才可以访问mydomain安全域中的HTTP内容。

    然后,你要在cams-user.xml文件中添加具有myrole角色的用户。在CAMS_HOME/conf/domains/mydomain/cams-user.xml
文件中添加以下行:

<user name="myuser" password="myuser" roles="myrole"/>

    保存文件。

=========================
步骤4 - 配置Cams Web代理
=========================

    在安装指南一节中,你已经安装好了Cams Web代理,我们假设前面的配置都正确无误。Cams Web代理要知道Cams
服务器的地址,它在用户库(通常是cams-user.xm)中还要具有所需要的认证信息。

    本文档假设在Web站点的根目录下有一个index.html文件,还假设你已经配置好Cams登录页面、错误页面和拒
绝页面或脚本,这些页面或脚本参考特定代理安装文档。

=============
步骤5 - 测试
=============

    启动Cams服务器,测试以上配置。

Linux/UNIX: 

$CAMS_HOME/camsServer/bin/runcams.sh

Windows: 

%CAMS_HOME%\camsServer\bin\runcams.bat

    本文档假设你使用发布包中的Tomcat HTTP服务器。启动Tomcat Web代理:

Linux/UNIX: 

$CATALINA_HOME/bin/startup.sh

Windows: 

%CATALINA_HOME%\bin\startup.bat

    注意:这些指令的执行之间没有顺序要求,Cams服务器和Cams Web代理的启动先后顺序无关。
    测试以上集成,通过Web代理的HTTP访问资源内容。你会看到登录页面提示:

username: myuser
password: myuser

    点击提交,你就会看到index.html页面。
    一切正常,成功![/pre]
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有