基于OpenAM系列的SSO----基础

摘要:
SSO——基于OpenAM系列的基本OpenAM简介:OpenAM是一个开源访问管理和授权服务平台。OpenAM原名OpenSSO,由SUN创建,现在属于Oracle。本文在OpenAM版本13的GettingstartedWithOpenAM文档中进行了描述和总结。由于本文是介绍文档,因此它采用了OpenAM中内置的默认身份信息仓库和身份验证链。关于授权OpenAM集中管理授权信息,将访问策略与受保护的资源分开。amAdmin是OpenAM的管理员,对OpenAM的配置拥有全部控制权。到目前为止,OpenAM主服务器和OpenAM主机都已配置。
基于OpenAM系列的SSO----基础
 

OpenAM简介:OpenAM是一个开源的访问管理、授权服务平台。由ForegeRock公司发起。OpenAM前身为OpenSSO,由SUN公司创建,现在属于Oracle。

本文在OpenAM 13版的Getting started With OpenAM文档上进行描述和总结。

在这个文档中你将了解如何使用OpenAM 和 Web策略代理 (policy agent)来管理一个网页的访问。

 
第一章:利用OpenAM对一个网站进行保护
 
1.1 关于OpenAM
OpenAM 将“控制访问”(access control)实现聚焦在处理验证(authentication)和授权(authorization)两个方面。
“验证”是对个体身份的鉴别,例如,验证用户名、密码等身份信息。
“授权”既授予通过验证后的用户对一些资源(图片、URL等)的访问权。
 
关于验证
OpenAM中定义了一条"验证链"(authentication chain)来对用户身份信息进行验证,“验证链”由单个或多个验证模块(authentication module)组成。
这些模块分别于身份信息仓储(identity repositories)连接,身份信息仓储存储了用户的信息并提供验证服务。
身份信息仓储包含了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  需要安装的软件
 
  1. JDK(OpenAM是一个Java web 程序)
  2. Apache HTTP server(本文中访问控制的web应用部署在http server上)
  3. Apache Tomcat 
  4. OpenAM 核心包 (OpenAM的主web程序)
  5. 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。
 
启动httpd:
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/ 看是否成功。
page17image4568   
点击主页上的Create Default Configuration,同意协议。
 
设置默认用户(amAdmin)的密码为password,默认策略代理(UrlAccessAgent)的密码为secret12,点击Create Configuration进入配置OpenAM。
 
注意:以上密码仅供这次测试用。amAdmin是OpenAM的管理员,拥有对OpenAM配置的一切控制权。在这篇文档中 UrlAccessAgent并未用到。配置的管理员是超级用户。
page19image1512
 
点击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
page21image4352
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
page22image1504
page22image2360
点击Create 保存设置。
 
4.在policy页面上点击Actions tab,输入以下信息
     a. 在action 下拉框上选中 GET,点击Add action
     b. 在action 下拉框上选中POST,点击Add action
     c. 点击 Save Changes
page23image6600
5. 在policy页面上点击Subjects,输入以下信息
     a.选择 All of ..
     b. 在Type Section上点击Edit标识,在下拉框中选中Authenticated Users,然后点击checkmark。
     c. 点击 save changes
 
page24image1488
 
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
 
     
page25image4520
 
     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
page28image1448
 
一旦登陆成功,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
 
 
 
 
 

免责声明:文章转载自《基于OpenAM系列的SSO----基础》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle10g安装,卸载使用正则表达式限制swing (JTextField等) 的输入下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTTP报文解析

HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行+请求头+请求体):  下面是一个实际的请求报文:  ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,Spring 3.0提供了一个HiddenHttpMethodFilt...

MyBatis学习(五)MyBatis-开启log4j日志

1、前言 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地...

SAML在SSO中的应用

本篇文章来源于IBM:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1111_luol_sso/1111_luol_sso.html SAML 2.0 简介 SAML(Security Assertion Markup Language) 安全断言标记语言是由标识化组...

selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain

在使用selenium进行自动化登录的过程中已经获取到cookie后,依旧报错:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain 获取cookie和添加cookie原代码如下: #获取cookie dr = webdriver...

记一次 synchronized 锁字符串引发的坑兼再谈 Java 字符串

业务有一个需求,我把问题描述一下: 通过代理IP访问国外某网站N,每个IP对应一个固定的网站N的COOKIE,COOKIE有失效时间。 并发下,取IP是有一定策略的,取到IP之后拿IP对应的COOKIE,发现COOKIE超过失效时间,则调用脚本访问网站N获取一次数据。 为了防止多线程取到同一个IP,同时发现该IP对应的COOKIE失效,同时去调用脚本更新...

hibernate必须知道的知识

Hibernate经典知识:   1、Hibernate工作原理及为什么要用?     1.       答:hibernate,通过对jdbc进行封装,对 java类和关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作. 1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 hibernate的性能非常好...