身份信息仓储包含了LDAP目录,关系型数据库,RADIUS(Remote Authentification Dial in User Service) , Windows授权,one-time 密码服务(OTP),和一些其他的访问管理系统。
“验证链”的意义:将不同的验证服务连接在一起,为一些敏感资源提供更强的保护。还可以实现当用户成功登陆后记住用户的登陆设备、当用户登陆环境不正常时提供额外的验证要求等。
本文由于是入门文档,所以采用了OpenAM中内置默认的身份信息仓储和验证链。
关于授权
OpenAM对授权信息进行了集中化管理(centralize authorization),这使得访问策略(access policy)与受保护的资源分离。
与在web应用(受保护的)代码中嵌入访问策略不同,OpenAM在web应用部署的web服务器上(httpd,tomcat等)上安装一个策略代理(policy agent,下文简称PA)来执行OpenAM的验证结果。
OpenAM做出用户验证判断结果(允许或拒绝用户访问某资源),交给PA来执行。
接下来,将安装OpenAM,创建一个策略(policy),安装一个策略代理(policy agent )及在一台Web服务器上实现对一个页面的访问验证。
1.2 需要安装的软件
- JDK(OpenAM是一个Java web 程序)
- Apache HTTP server(本文中访问控制的web应用部署在http server上)
- Apache Tomcat
- OpenAM 核心包 (OpenAM的主web程序)
- OpenAM Apache Policy Agent (安装在Apache HTTP server上,对用户的请求进行解析并执行OpenAM做出的用户验证判断结果)
1.3 安装过程 (本文仅讨论在CentOS下的安装)
a. 修改 hosts文件
OpenAM 保护Web资源时, 需要你使用完整域名(fully qualified domain names)
这是因为OpenAM 使用cookie来跟踪单点登录(Single Sign-On)的会话,根据完整的服务器名和域来识别cookies。
在这里我们通过修改hosts文件在一台服务器上实现两个不同的访问域名。
注:本文档是搭建一个简单的测试环境,所以OpenAM和web应用被放在一个server上。openam.example.com是OpenAM的域名,而www.example.com是Web应用的域名。
b. 安装Apache HTTP server
OpenAM web 策略登代理需要Apache 1.3以上,这里推荐2.2.9以上的版本
安装 Apache HTTP server
$ yum install httpd
修改httpd配置文件,使服务器名称为 www.example.com,将端口改为8000。
service httpd start
访问URL: http://www.example.com:8000 看是否安装成功。
c.安装Tomcat(略)
安装完成启动后访问 http://openam.example.com:8080看是否成功。
d.安装OpenAM
从 OpenAM上下载 OpenAM企业版的.war文件。
将.war文件部署到Tomcat下
访问 http://openam.example.com:8080/openam/ 看是否成功。
点击主页上的Create Default Configuration,同意协议。
设置默认用户(amAdmin)的密码为password,默认策略代理(UrlAccessAgent)的密码为secret12,点击Create Configuration进入配置OpenAM。
注意:以上密码仅供这次测试用。amAdmin是OpenAM的管理员,拥有对OpenAM配置的一切控制权。在这篇文档中 UrlAccessAgent并未用到。配置的管理员是超级用户。
点击Proceed to Login,用amAdmin身份登录,成功后将进入 Realm 页面。
OpenAM完成配置后,将自动在用户的home目录下新建~/openam/(/root/openam/)文件夹,里面含有Openam的配置信息,集成的OpenDJ目录服务器。文件夹名字与服务器实例的名字相同(server instance),此外还有一个隐藏文件夹 ~/.openamcfg/,(/root/.openamcfg/)其中包含了OpenAM的启动文件,如果你损坏了OpenAM的配置文件,或者想重新安装OpenAM,最快的解决方法是关闭tomcat,删除这两个文件夹,重新配置OpenAM。
目前为止,OpenAM主服务器和OpenAM主机都配置完成。
e. 在OpenAM配置一个策略
策略(policy)是OpenAM验证用户并赋予用户权利的根据。根据以下步骤将创建一个策略,赋予所有通过验证用户,在之前配置的Apache HTTP 主页上行使HTTP GET的权利。
1. 打开OpenAM 控制台,在Realms页面上选择根域(Top level Realm)。
OpenAM将身份(identities),策略 (policies),策略代理信息(policy agent profiles)集成到realms里进行挂历。
2. 点击 Authorization > Polices > iPlanetAMWebAgentService > Add A New Policy
3. 在New Policy页面上,输入以下信息:
a. 名称:输入”Authenticated users can get Apache HTTP home page”供本次测试
b. 描述:输入”This policy lets users who have authenticated to OpenAM access to the Apache home page."供本次测试
c. 资源类型:点击下拉框,选择”URL”供本次测试
d. 资源:在下拉框中选中”*://*:*/*”,然后输入资源URL:http://www.example.com:8000/*,然后点击 Add
点击Create 保存设置。
4.在policy页面上点击Actions tab,输入以下信息
a. 在action 下拉框上选中 GET,点击Add action
b. 在action 下拉框上选中POST,点击Add action
c. 点击 Save Changes
5. 在policy页面上点击Subjects,输入以下信息
a.选择 All of ..
b. 在Type Section上点击Edit标识,在下拉框中选中Authenticated Users,然后点击checkmark。
c. 点击 save changes
f. 创建web 策略代理简介(policy agent profile)
OpenAM 存储策略代理的profile默认是”集中式”(centralized)的,既保存在openam server端,而不是policy agent所在web容器。
策略代理(policy agent)在web应用所在容器上的安装和启动过程中,通过OpenAM server中设置的策略代理profile,得到相应的配置信息。管理员在OpenAM后台中修改profile的配置,策略代理端也能同步更新。
1. 在OpenAM控制台上,点击Realms > Top Level Realm > Agents >Web,然后点击New 在 Agents table
2. 输入以下信息
Name : WebAgent
Password: password
Configuration: Centralized
Server URL: http://openam.example.com:8080/openam
Agent URL: http://www.example.com:8000
3. 点击Create 保存 profile信息.
g. 安装OpenAM Web 策略代理 ( policy agent)
OpenAM 策略代理是OpenAM中定义的策略的实施者,判断用户是否对请求的资源具有访问权限是由OpenAM根据用户信息(HTTP cookie中的SSO token)及设定好的策略做出决定。
策略代理在Apache HTTP Server中以 Library的形式运行,当Apache HTTP Server启动的时候,它被载入。当请求到来,策略代理将用户重定向到OpenAM进行身份验证或者向OpenAM请求用户授权结果。
1. 根据Apache HTTP Server的版本,在下载页面上下载OpenAM policy agent。
这里选择 3.3.0版本。
2.创建密码文件,当代理安装器(agent installer)第一次连接OpenAM时读取。(密码等于openam端设置的agent profile密码)
3. 查看OpenAM 服务器 URL,保证OpenAM正在运行
http://openam.example.com:8080/openam
4. 停止Apache HTTP Server
$ service httpd stop
5. 安装 策略代理
解压下载的zip包,并进入文件夹中的bin目录
$ cd /path/to/web_agents/apache22_agent/bin
运行agentadmin指令,输入准确的信息
$ ./agentadmin ——instal ——acceptLicense
6. 启动 Apache HTTP Server,安装完成
1.4 验证
1. 注销 OpenAM控制台
2. 浏览 http://www.example.com:8000
此时,策略代理将拦截你对上页面的请求,如果你的浏览器中并没有一个包含了OpenAM session的cookie,因此你将会被重定向到OpenAM,进行身份验证。
3. 输入用户名 demo ,密码 changeit
一旦登陆成功,OpenAM设定了一个session cookie ,名称为iPlanetDirectoryPro,域名为.example.com。
该域名为你访问的web应用域名。
如果你在浏览器将查看这个cookie,你将看到类似AQIC5wM2LY4SfcwciyfvJcQDUIB7kIWEH187Df_txqLdAVc. *AAJTSQACMDEAAlNLABMxMDYwNzY1MjQ0NTE0ODI2NTkx*.的值。这是加密后的SSO Token值。Openam通过它来决定你的一系列身份操作,例如验证,登陆,注销。当这个session失效,你必须重新认证。
OpenAM session 用于 SSO(单点登陆)。OpenAM以此为依据进行授权判断。
SSO session 终结的方式有几种,例如:当浏览器session终结时,从OpenAM注销时。OpenAM也设立了两个限制:当session不活动一段时间(默认30分钟),超过生命上限(默认2小时)。
4. 成功登陆后,你被重新定义到最初请求页面。
在后台,OpenAM将你的浏览器重定义到你最初请求的页面http://www.example.com:8000。web策略代理拦截该请求,发现SSO Token的存在,然后向OpenAM咨询“该用户是否有权限访问http://www.example.com:8000”,OpenAM回复策略代理“同意通过”。因此策略代理允许Apache HTTP Server 返回请求页面。
以上为部署一个简单OpenAM 单点登录的例子。
关于更多OpenAM的信息,请阅读下文。
1.5 关于Stateless Session
在上文中提到的 名称为iPlanetDirectoryPro的session cookie实际上保存的是一个定位信息,指向的是OpenAM服务器上真正的关于本次会话信息的保存位置。
关于这种保存在服务器内存中的session称为有状态Session(stateful session)。
OpenAM也支持无状态Session(stateless session),既session保存在客户端。
关于如何配置stateless sessions。
第二章:更多关于OpenAM