Java Solaris 加入Sun中国技术社区 我的社区 注册说明

BigAdmin 系统管理门户网站
专题文章:使用 Sun Java System Access Manager 2005Q4 和 Sun Java System Access Manager Policy Agent 2.2 设置单点登录

使用 Sun Java System Access Manager 2005Q4 和 Sun Java System Access Manager Policy Agent 2.2 设置单点登录

Manikandan Chandrasekaran,2006 年 8 月

摘要:本快速入门指南旨在帮助用户为 Sun Java Enterprise System 软件上运行的 Web 应用程序设置单点登录 (Single Sign-On, SSO)。

免责声明:本文并不是此处提到的各种 Sun 产品的详细指南。 http://docs.sun.com 上的正式文档是所有信息的最终和权威性来源。

在开发 Web 应用程序时,一个主要的安全要求就是执行验证和授权。随着应用程序数量的增加(在类型和复杂性方面),实现验证和授权的各种方法也变得越来越多。

因此,有权访问多个应用程序的用户最终可能会具有多个标识:即使多个应用程序共享一个用户系统信息库,用户仍需要重新进行登录,因为在应用程序之间没有传递

用户凭证。因此,应用程序之间的 SSO 在企业中变得至关重要。

在大量的 Sun Java Enterprise System 中间件中,Sun Java System Access Manager 是其中的一个主要产品,用于提供应用程序的用户验证、授权和 SSO。它使用

基于代理的方法来保护 Web 应用程序。各个代理组成了 Sun Java System Access Manager Policy Agent 软件集。这些单独的代理属于两个不同的类别:Web 代理和

Java 2 Platform, Enterprise Edition (J2EE) 代理。Web 代理保护 Web 和代理服务器上的内容;而 J2EE 代理则保护各种部署容器中的内容,其 中包括应用服务器和门

户服务器。

代理截取对部署容器(如 Web 或应用服务器)中运行的受保护资源的请求(可以为整个容器或特定的应用程序配置此功能),此部署容器受代理保护。代理检查 Cookie

中嵌入的会话标记并验证 SSO 标记。然后,代理将此请求发送到 Java System Access Manager Policy Service,以授予或拒绝对受保护资源的访问。接 下来进行策略

决策,以确定是同意还是拒绝该请求。有关这种体系结构的更多详细信息,请参见 Sun Java System Access Manager 文档和 《Sun Java System Access Manager Policy Agent User's Guide》

(Sun Java System Access Manager Policy Agent 用户指南)

“实用链接”部分提供了 Sun Java System Access Manager 的可用代理列表。

Sun Java System Access Manager Policy Agent 2.2(最新版本)包含很多新功能;请参见“实用链接”下面的《Sun Java System Access Manager Policy Agent 2.2 Release Notes》(Sun Java System Access Manager Policy Agent 2.2 发行说明)文档。本 文旨在说明其中很少一部分功能,以使开发者第一时间掌握如何在 Web 应用程序之间快速设置简单的 SSO。以后,您可能还会用到 Java System Access Manager 和代理的其他功能。本 文档说明了以下功能:

  1. 多个容器之间的 SSO:Sun Java System Web Server、Sun Java System Application Server 和 Apache Tomca 上运行的应用程序
  2. 一些常用的脚本、配置文件和日志文件,用于设置 SSO 和调试代理
  3. 随 Java System Access Manager Policy Agent 2.2 提供的新样例演示应用程序的配置
  4. 基于非管理(非超级用户)的 Java System Access Manager Policy Agent 2.2 安装
  5. 基于新配置文件的 Java System Access Manager Policy Agent 2.2 安装

图 1:启用 SSO 的应用程序
(单击放大)

上图显示了一个简单的测试方案,我们在此处使用此方案来说明如何在不同类型的容器(Web 和应用服务器)之间以及来自不同供应商(Sun Microsystems 和 Apache Software Foundation)的产品之间实现 SSO。

请按照以下步骤实现 SSO:

  1. 安装 Sun Java Enterprise System 2005Q4。
  2. 在 Sun Java System Web Server 2005Q4 (6.1) 上安装并配置 Sun Java System Web Policy Agent 2.2。
  3. 在 Sun Java System Application Server 8.1 2005Q4 上安装并配置 Sun Java System Application Policy Agent 2.2。
  4. 在 Apache Tomcat 5.5 上安装并配置 Sun Java System Application Server Policy Agent 2.2。
  5. 测试各个应用程序之间的 SSO。

步骤 1:安装 Sun Java Enterprise System 2005Q4

在支持的 Web 容器(如 Sun Java System Application Server 或 Sun Java System Web Server)上安装 Java System Access Manager 2005Q4。请确保将安装中使用的数据记录下来,如下表中所示。

表 1:在安装过程中输入的重要 Access Manager 配置值
参数
amadmin 口令  
amldapuser 口令  
Access Manager 主机名 am.india.sun.com
Access Manager 端口 80
加密密钥  
 

注:在本示例中, am 是主机名, india.sun.com 是 Java System Access Manager 的域名,并且 Java System Access Manager 正在端口 80 上运行。请确保您可以访问 http://am.india.sun.com:/amconsole 上的 Java System Access Manager(以 amadmin 用户身份并使用口令)。

amadmin 身份登录到 Java System Access Manager,并创建以下 Access Manager 角色( 给出了一种例外情况)。请根据下表创建用户并分配角色。

表 2:Access Manager 管理控制台中的角色名称(分配给这些角色的用户)
角色名称 用户 ID
employee andybobchrisdaveellenfrank
manager andybobchris
everyone andybobchrisdaveellenfrankgina
customer(LDAP 组)

注:应将以上角色作为 LDAP 组来创建。

chrisellen
admin adminuser
 

步骤 2:在 Sun Java System Web Server 2005Q4(6.1) 上安装并配置 Sun Web Server Policy Agent 2.2

创建 Web 服务器实例

登录到 Java System Web Server 管理服务器并启动缺省 Web 服务器实例,例如,在端口 80 上运行的 ws.india.sun.com。此服务器实例将用于测试 SSO。请确保您可以从浏览器中访问 http://ws.india.sun.com

安装 Java System Access Manager Policy Agent

  1. 停止在端口 80 上运行的 Web 服务器实例。
  2. 使用正确的 Access Manager Policy Agent 2.2(适用于 Sun Java System Web Server 2005Q4 (6.1) 和正确的操作系统)。< /li>
  3. 开始安装代理,然后输入将安装此代理的 Web 服务器实例的目录位置(此处为 /jes4/opt/SUNWwbsvr/https-ws.india.sun.com)。
  4. 正确输入 Java System Access Manager 配置数据,尤其是 Java System Access Manager 服务器名称(全限定域名)、端口和用于共享秘密字段的 amldappassword不是 amadmin 口令)。单击 Install(安装)。
  5. 通过使用 Sun Java System Web Server 管理服务器,重新启动在 ws.india.sun.com 上运行的 Web 服务器实例。如果需要应用更改,请单击右上角的 Apply(应用),然后执行此操作。

测试 Web 服务器实例

访问 http://ws.india.sun.com 上的 Web 服务器。现在,系统将提示您进行登录。

创建用于访问 Web 服务器的策略

1. 登录到 http://am.india.sun.com/amconsole 上的 Access Manager,单击 View Policy(查看策略),> 然后创建一个新的 URL 策略。

2. 在此策略中添加一个新规则,以允许对 http://ws.india.sun.com/* 进行 GET 和 POST 访问。

图 2:创建新的 URL 策略
(单击放大)

3. 搜索 Access Manager 角色 employee,并将其作为主体添加到此策略中。

图 3:搜索 Access Manager 角色 Employee 并作为主体添加
(单击放大)

4. 单击 Finish(完成)并保存。

:如果 Access Manager 和代理(保护 Web 服务器)在同一台服务器上运行,Microsoft Internet Explorer 在重定向用户时将无法区分端口号。您需要设置以下属性来解决此问题。如果代理和 Access Manager 在不同的服务器上运行,或者您使用 Mozilla 或 Firefox 浏览器进行访问,则 需要进行以下更改:

1. 备份此文件(缺省代理属性位置):

/etc/opt/SUNWam/agents/es6/config/_jes4_opt_SUNWwbsvr_https-ws.india.sun.com/AMAgent.properties

图 4:通用的 Sun xterm
(单击放大)

更改此属性文件中的 com.sun.am.policy.agents.config.override_port=true

2. 可以为 Web 代理配置一个自定义错误页。在 /opt/SUNWwbsvr/docs/ 下面创建一个名为 error.html 的 HTML 页。在 Amagent.properties 文件中,更改以下属性以创建您自己的自定义错误页:

# The URL of the access denied page.  If no value is specified, then

# the agent will return an HTTP status of 403 (Forbidden).

#

com.sun.am.policy.agents.config.accessdenied.url =http://ws.india.sun.com/error.html


3. 要在 AMAgent.properties 文件中进行任何更改,您需要重新启动 Web 服务器实例 ws.india.sun.com

登录到 http://ws.india.sun.com。出现系统提示后,应允许 employee 角色中的任何用户访问该页。


步骤 3:在 Sun Java System Application Server 2005Q4 (8.1) 上安装并配置 Sun Java System Application Server Policy Agent 2.2

1. 下载适用于 Sun Java System Application Server 8.2 的 Access Manager Policy Agent 2.2(请参见“实用链接”)。创 建一个目录,然后解压缩下载的代理。

2. 在 Access Manager 中创建代理配置文件:

  • amadmin 身份登录到 http://am.india.sun.com/amserver/console 上的 Access Manager 控制台(也可以使用 http://am.india.sun.com/amconsole 上的旧控制台)。( 注:如果使用的是 Access Manager 6.3,则只能访问 http://am.india.sun.com/amconsole 上的控制台。)
  • 单击 Access control(访问控制),然后选择 Realm(领域)。单击 Subjects(主体),然后单击 Agents(代理)。创建一个新代理(如 TestProfile)。在安装该代理时,需要使用此数据。

3. 登录到 Application Server 管理控制台,然后创建一个新的应用服务器实例。我们将其命名为 test1,它在 http 端口 80 上运行。在此阶段,您可能需要创建一个应用服务器节点代理。

4. 停止 Application Server 域管理服务器和应用服务器实例 test1

5. 开始安装代理。

./agentadmin -install


注:如果 agentadmin 没有执行权限,请如 chmod +x agendadmin 中所示添加执行权限。

6. 在安装代理时输入正确的数据。样例代理摘要表如下所示:

Application Server Config Directory :


/jes4/var/opt/SUNWappserver/domains/domain1/config Application
Server Instance name :
test1 Access Manager Services Host :
am.india.sun.com Access Manager Services Port :
80 Access Manager Services Protocol : http Access Manager Services
Deployment URI : /amserver Agent Host name : sunas.india.sun.com Domain Administration Server Host
is remote : false Application Server Instance Port number:
80 Protocol for Application Server instance :
http Deployment URI for the Agent Application : /agentapp Encryption
Key : GYI3egsTP5FeDHtxf6WuBzj9nQdG2Y Agent Profile name :
TestProfile Agent Profile Password file name :
/jes4/agentpassword Agent installed on the DAS host for a remote
instance : false Agent and Access Manager on same application server instance : false

(注:如果将 Access Manager Policy Agent 和 Access Manager 安装在同一台服务器上,则此属性应该为 true。)

7. 启动 Application Server 域服务器和应用服务器实例 test1

8. 通过使用 Application Server 管理控制台,将 Access Manager Policy Agent 2.2 提供的 Access Manager Policy Agent 应用程序 agentapp(位于 <agent-base>/etc/agentapp.war)部署到应用服务器实例 test1 上。Access Manager Policy Agent 将使用此应用程序。

9. 将样例 J2EE 测试应用程序 agentsample(随 Access Manager J2EE 代理提供)部署到应用服务器实例 test1 上。该应用程序位于 <agent base installdirectory>j2ee_agents/am_as81_agent/sampleapp/dist/agentsample.ear 中。

这是用于测试 SSO 的样例应用程序。

10. 如果要使用您自己的 J2EE 应用程序,请确保 web.xml 中具有所需的 filterfilter-mapping 标记(如 Access Manager Policy Agent 文档中所指定的那样)。

11. 如 <agent base installdirectory>j2ee_agents/am_as81_agent/sampleapp 中的 readme.txt 所指定的那样,使用 Access Manager 控制台创建策略。(注:已在步骤 1 中创建了角色和用户。)

12. 重新启动应用服务器实例 test1

13. 确保您能够访问 http://sunas.india.sun.com,而不会出现系统提示。此外,还要确保您能够访问 http://sunas.india.sun.com/agentapp,并显示 Access Manager 登录屏幕。您可以作为 employee 角色、manager 角色或 customer 组中的任何用户或 india 域中的任何用户登录。


步骤 4:在 Apache Tomcat 5.5 上安装并配置 Sun Java System Application Server Policy Agent 2.2

注:Apache Tomcat 5.5 的所有操作都将以 tomcat 组中的非超级用户 tomcat 身份完成。此演示还用于说明可以作为非超级用户/非管理用户安装 Access Manager Policy Agent。

1. 创建一个名为 tomcat 的组,并创建一个属于该组的用户 tomcat

2. 以非超级用户 tomcat 身份下载并安装 Apache Tomcat 5.5。安装 Apache Tomcat 5.5 的核心和管理 Web 模块。请参阅 Apache Tomcat 文档以了解如何进行安装和配置。

$CATALINA_HOME/conf/tomcat-users.xml 中添加以下条目:

<user name="manager" password="manager" roles="standard,manager" />

<user name="admin" password="admin" roles="admin" />


您将通过一个名为 adminuser 的用户来访问 admin 应用程序。因此,必须在 $CATALINA_HOME/conf/tomcat-users.xml 中再输入一次 adminuseradminuser 的口令可能是伪口令,因为 Access Manager 并不使用它)。

样例文件如下所示:

<?xml version='1.0' encoding='utf-8'?>

<tomcat-users>

<role rolename="tomcat"/>

<role rolename="role1"/>

<role rolename="standard"/>

<role rolename="manager"/>

<role rolename="admin"/>

<user username="tomcat" password="tomcat" roles="tomcat"/>

<user username="role1" password="tomcat" roles="role1"/>

<user username="both" password="tomcat" roles="tomcat,role1"/>


<user username="adminuser" password="admin123" roles="admin"/>
<user username="manager" password="manager" roles="standard,manager"/> <user
username="admin" password="admin" roles="admin"/> </tomcat-users>

如果要在 Access Manager 中创建一个名为 admin 的用户以访问 Tomcat admin 应用程序,则不需要执行前面的步骤,因为此用户 ID 在 tomcat-users.xml 中已存在。

3. 启动 Tomcat,并确保能够作为用户 ID manageradmin 来访问 Apache Tomcat 主页 http://tomcat.india.sun.com 以及 manager/admin 应用程序。

4. 下载适用于 Apache Tomcat 5.5 Servlet/JavaServer Pages (JSP) 容器的 Sun Java System Access Manager Policy Agent 2.2(请参见“实用链接”)。创建一个目录 <PolicyAgentHome>,然后解压缩下载的代理。

5. 通过使用以下步骤,在 Access Manager 中创建一个代理配置文件:

• 以 amadmin 身份登录到 http://am.india.sun.com/amserver/console 上的 Sun Access Manager 控制台(也可以使用http://am.india.sun.com/amconsole 上的旧控制台)。

注:如果使用的是 Access Manager 6.3,则只能访问 http://am.india.sun.com/amconsole 上的控制台。

• 单击 Access control(访问控制),然后选择 Realm(领域)。单击 Subjects(主体),然后单击 Agents(代理)。创建一个新代理 (TomcatProfile)。在安装该代理时,需要使用此数据。

• 在下面的文件中复制用于创建配置文件的口令: /export/home/tomcatuser/agentpassword

6. 关闭 Tomcat 服务器。

7. 从步骤 2 创建的目录中开始安装代理 <PolicyAgentHome>/j2ee_agents/am_tomcat_agent/bin/agentadmin -install。样例安装摘要如下所示:

Tomcat Server Config Directory :


/export/home/tomcat/apache-tomcat-5.5.15/conf Access Manager
Services Host :
am.india.sun.com Access Manager Services Port :
80 Access Manager Services Protocol : http Access Manager Services
Deployment URI : /amserver Agent Host name :
tomcat.india.sun.com
$CATALINA_HOME environment variable :

/export/home/tomcat/apache-tomcat-5.5.15

Tomcat global web.xml filter install : true

Application Server Instance Port number :
5555 Protocol for Application Server instance : http Deployment URI
for the Agent Application : /agentapp Encryption Key : KEQBXNuosQ5ntb5+lmpo2L1BM9OIK7 Agent
Profile name :
TomcatProfile Agent Profile Password file name :
/export/home/tomcat/agentpassword

8. 将 <PolicyAgentHome>/j2ee_agents/am_tomcat_agent/etc/agentapp.war 复制到 Apache Tomcat 的 webapps 目录中。Access Manager Policy Agent 需要使用此应用程序。

9. 将 <PolicyAgentHome>/j2ee_agents/am_tomcat_agent/sampleapp/dist/agentsample.war 复制到 Apache Tomcat 的 webapps 目录中。这是用于测试 SSO 的样例应用程序。

10. 按照 <PolicyAgentHome>/j2ee_agents/am_tomcat_agent/sampleapp/readme.txt 中提到的步骤,在 Access Manager 中为 Tomcat 上运行的应用程序创建策略。

注:由于在安装适用于 Sun Java System Application Server 的 Access Manager Policy Agent 时已创建了角色和用户,因此,在为与 Tomcat 应用程序相关的 URL 创建策略时,您可以重复使用这些角色和用户,而无需重新创建。

11. 按照 <PolicyAgentHome>/j2ee_agents/am_tomcat_agent/sampleapp/readme.txt 文件中提到的步骤,对下面的文件进行更改: <PolicyAgentHome>/j2ee_agents/am_tomcat_agent/agent_001/config/AMAgent.properties。< /p>

  com.sun.identity.agents.config.filter.mode[admin]=ALL

com.sun.identity.agents.config.filter.mode[manager]=ALL

com.sun.identity.agents.config.filter.mode[host-manager]=ALL

com.sun.identity.agents.config.filter.mode = J2EE_POLICY


12. 由于 Tomcat 的 admin 和 manager 应用程序还受 Access Manager Policy Agent 保护,因此,请按照 Conditional Post-Installation Steps for J2EE Agents in Policy Agent 2.2(在 Policy Agent 2.2 中安装 J2EE 代理后的条件安装步骤)中提到的步骤进行操作。在 manageradminhost-manager Web 应用程序(位于 <TOMCAT-Home>/server/webapps 中)的 web.xml 中进行以下更改:

 

id=manager,ou=role,dc=india,dc=sun,dc=com

id=admin,ou=role,dc=india,dc=sun,dc=com


此外,还需要修改 agentsample 应用程序中的 web.xml,以将 dc=iplanet,dc=com 更改为安装的领域。

注:请根据 Access Manager 中的领域进行更改。前面提到的更改是在 dc=india,dc=sun,dc=com 领域中安装 Access Manager 时进行的。

13. 启动 Apache Tomcat 服务器,并访问在以下位置运行的 Tomcat 应用程序:

  • http://tomcat.india.sun.com/agentsample
  • http://tomcat.india.sun.com
  • http://tomcat.india.sun.com/admin/
  • http://tomcat.india.sun.com/manager/html

测试 SSO

在 Access Manager 中以 amadmin 身份登录,并确保已创建了以下策略。

表 3:需要在 Access Manager 管理控制台中创建的策略
策略 规则 主体(角色名称)
1

http://sunas.india.sun.com/agentsample/jsp/*

http://sunas.india.sun.com/agentsample/invokerservlet

http://sunas.india.sun.com/agentsample/protectedservlet

http://sunas.india.sun.com/agentsample/securityawareservlet

http://sunas.india.sun.com/agentsample/unprotectedservlet

india(整个组织)
2

http://tomcat.india.sun.com/agentsample/jsp/*

http://tomcat.india.sun.com/agentsample/protectedservlet

http://tomcat.india.sun.com/agentsample/securityawareservlet

india(整个组织)
3

http://sunas.india.sun.com/agentsample/urlpolicyservlet

customer(LDAP 组)
4

http://tomcat.india.sun.com/agentsample/urlpolicyservlet

customer(LDAP 组)
3

http://tomcat.india.sun.com/admin/*

admin
4

http://tomcat.india.sun.com/manager/*

manager
5

http://sunws.india.sun.com/*

employee
 

根据以下访问控制矩阵测试各种应用程序的 SSO。

表 4:用于测试各种方案的访问控制矩阵
角色名称 用户 ID 可以访问的 URL
employee andybobchrisdaveellenfrank

http://tomcat.india.sun.com/agentsample/securityawareservlet

http://sunas.india.sun.com/agentsample/securityawareservlet

http://sunws.india.sun.com

manager andybobchris

http://tomcat.india.sun.com/agentsample/protectedservlet

http://sunas.india.sun.com/agentsample/protectedservlet

http://tomcat.india.sun.com/manager

india 域中的每个用户 andybobchrisdaveellenfrankginaadminuser

http://tomcat.india.sun.com/agentsample

http://sunas.india.sun.com/agentsample

customer(LDAP 组) chrisellen

http://tomcat.india.sun.com/agentsample/urlpolicyservlet

http://sunas.india.sun.com/agentsample/urlpolicyservlet

admin adminuser

http://tomcat.india.sun.com/admin

 

随 Access Manager Policy Agent 提供的 agentsample 应用程序在部署描述符中包含特定于 Access Manager 的 filter 标记。如果需要使用 Access Manager Policy Agent 来保护 J2EE 应用程序,则需要添加这些过滤器。有关特定的详细信息,请参阅样例应用程序。


小结

本文说明了如何使用 Sun Java System Access Manager Policy Agent 和 Sun Java System Access Manager 在不同 Web 容器之间设置和配置 SSO。应将本文作为了解 Sun Java System Access Manager 和 SSO 的良好开端。以后,我们可能还会推出介绍 Java System Access Manager Policy Agent 和 Java System Access Manager 更高级功能的文章。


故障排除提示

1. 如果在安装并配置策略代理后看不到受保护的 Apache Tomcat 主页,请确保用户 tomcat:tomcat 拥有 /export/home/tomcat 下的所有文件。

2. 在进行任何更改之前,请备份 AMAgent.properties 文件。对 AMAgent.properties 文件进行更改后,需要重新启动 Web 容器(除非启用了 hot-swap 标志)。

3. 通过在 AMAgent.properties 中设置 com.iplanet.services.debug.level=message 属性,可以在策略代理中启用调试。


实用链接