基于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/ 看是否成功。
   
点击主页上的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
 
 
 
 
 

基于OpenAM系列的SSO----基础的更多相关文章

  1. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  2. Spring Ioc源码分析系列--Ioc的基础知识准备

    Spring Ioc源码分析系列--Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为The IoC Containe ...

  3. 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器

    × 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...

  4. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  5. .NET 并行(多核)编程系列之六 Task基础部分完结篇

    原文:.NET 并行(多核)编程系列之六 Task基础部分完结篇 .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些 ...

  6. 运维与自动化系列④自动化部署基础与git

    运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有 ...

  7. Mina 系列(二)之基础

    Mina 系列(二)之基础 Mina 使用起来多么简洁方便呀,就是不具备 Java NIO 的基础,只要了解 Mina 常用的 API,就可以灵活使用并完成应用开发. 1. Mina 概述 首先,看 ...

  8. php从入门到放弃系列-02.php基础语法

    php从入门到放弃系列-02.php基础语法 一.学习语法,从hello world开始 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器&qu ...

  9. 顽石系列:Linux基础笔试

    顽石系列:Linux基础笔试 系统操作 压缩文件 扩展名 压缩程序 *.Z compress *.zip zip *.gz gzip *.bz2 bzip2 *.xz xz *.tar tar 程序打 ...

随机推荐

  1. 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解

    http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...

  2. 题解 [51nod1753] 相似子串

    题解 [51nod1753] 相似子串 题面 解析 先考虑相等的时候怎么办, 我们考虑求出每个字母的贡献,这样字母相等的问题就可以用并查集来解决. 具体来说,我们先对于每个字母,把S中等于它的标为1, ...

  3. git删除指定commit

    1.使用git log 命令,查看已提交的记录.例如红色圈出的commit是本次要删除的commit. 2.先找到此次提交之前的一次提交的commit 1d6b81b138f89735265900b9 ...

  4. PowerDesigner创建表 拷贝创建表语句 SQLSERVER创建数据库 使用查询 创建表 并且添加数据

    PowerDesigner创建表 : 1.双击打开PowerDesigner   2.双击打开Create model 3左键点击Model  types,再点击Physical    Data  m ...

  5. CF620E New Year Tree 线段树+dfs序+bitset

    线段树维护 dfs 序是显然的. 暴力建 60 个线段树太慢,于是用 bitset 优化就好了 ~ code: #include <bits/stdc++.h> #define M 63 ...

  6. koa2做请求转发

    最近用koa2做请求转发时,采用了request(options).pipe(ctx.res)的方法,结果出现了有时候前端获得的数据是分片的. 后来翻阅文档,采取了如下方式解决: const Pass ...

  7. 爬虫(七):爬取猫眼电影top100

    一:分析网站 目标站和目标数据目标地址:http://maoyan.com/board/4?offset=20目标数据:目标地址页面的电影列表,包括电影名,电影图片,主演,上映日期以及评分. 二:上代 ...

  8. python循环导入的问题

    1.问题 循环导入,代码如下: from c import c def b(): print('b') b.py from b import b def a(): # from b import b ...

  9. ubuntu中防火墙iptables配置

    特别说明:此文章完全转载于https://www.cnblogs.com/EasonJim/p/6851007.html 1.查看系统是否安装防火墙 root@localhost:/usr# whic ...

  10. thinkphp5/php cors跨域处理

    现在做项目,很多都是前后端分离.也就是前段,后端都有自己的域名. 那么前段请求后端接口的时候,就会出现跨域问题.出现跨域的问题,主要 是浏览器的安全策略-同源策略.那么怎么解决跨域问题呢,抛出主角 C ...