이 글은, 실험적인 내용을 그대로 기록한 것이라서, 다소 장황함. 설치에 대한 요약본은 아래 링크 참조할 것!
JOSSO를 설치해서 실험해보자.
다운로드
- 다운로드 사이트 2009년 8월 현재, 최신 버전 1.8.0 ZIP 파일 다운로드
임시 폴더에 압축을 풀어놓는다. c:\tools\josso-1,8.0 (설치 작업이 끝난 후에는 삭제할 예정임. 뭐, 공간 남으면 그대로 둬도 무해하다.)
JOSSO Gateway 설치
Gateway는 뭔가 ‘통로’가 되는 도구로서, 인증 서버의 모듈을 의미한다. 대비되는 개념으로는 Agent가 있다.
윈도 커맨드 창(cmd)을 열어, cd c:\tools\josso-1.8.0\bin 으로 가서, josso-gsh 실행
잠깐, 설치하려는 target인 tomcat의 버전을 확인. xampp 1.7.2 패키지의 add-on인 tomcat 버전은, 6.0.20이다.
따라서, 위의 josso-gsh 쉘에서 실행해야 할 설치 명령은 아래와 같다.
gateway install --target "$TOMCAT_HOME" --platform tc60 exit |
순진하게 그대로 하면, 다음과 같은 에러를 보게 된다.
당연히, $TOMCAT_HOME과 같은 환경변수는 설정되어 있지도 않고, 더구나 현재 설치하려는 시스템은 ‘윈도’이므로 위와 같은 게 먹히지도 않는다. 그냥, 직접 지정해주자.
애석하게도, “c:\tools\xampp\tomcat” 과 같이 지정해주면, 위와 같은 에러가 난다. ‘경로’를 표시해주는 방식을 ‘유닉스 스타일’로 바꿔주자.
뭔가 꽤 많은 파일들이, 곳곳에 설치된다. 훗날을 위해, 잘 기억해두는 게 좋겠다.
Install JOSSO Gateway Configuration Deploy JOSSO Gateway Application |
다소 쫌 특이하게도, josso-*-xml 설정파일들이 tomcat/lib 폴더에 깔린다.
그리고, 이건 내 컴퓨터만의 특이사항인데, 램디스크를 TEMP 폴더로 사용하고 있어서 인지,
josso-auth.properties 파일이 Z:/TEMP 폴더에 생겼다. 이거 나중에 모르고 지워질 수도 있는데, 어째, 쬐금, 불안하다. 아, 다시 자세히 보니, 똑같은 파일을 c:/tools/xampp/tomcat/lib/josso-auth.properties 로도 이미 가지고 있다. 걱정안해도 되겠다.
설정파일 이외에 주요 프로그램들은 모두 webapps/josso 라는 폴더에 모아져 있다.
자, tomcat을 재시동하고, 아래 URL을 방문해보자.
http://localhost/josso/signon/usernamePasswordLogin.do
http://localhost:8080/josso/signon/login.do
기본으로 설정되어 있는 사용자 아이디와 패스워드는 아래와 같다. 참고로, 이 값들은, josso-credentials.xml 에 들어있고, 상세정보는 josso-users.xml 에 들어있다.
user1 | user1pwd |
user2 | user2pwd |
tomcat | tomcatpwd |
위 페이지에 입력하고 ‘Login’ 버튼을 누르면, 짜잔~
혹시나 해서, 현재 로그인되어 있는 페이지에서 브라우저 쿠키값을 아래와 같이 확인해봤다. JOSSO Session 값과는 다르다.
PHP JOSSO Agent 설치
설치방법은 다소 좀 복잡하다. 우선, 소스에 있는 압축파일을 열어본다. C:\Tools\josso-1.8.0\dist\agents\src\josso-php-agent-1.8.0-.zip . 폴더가 두 개 있다. 각각 다르게 설치해준다.
josso-php-inc | agent 프로그램 기본 클래스, 설정파일 | php.ini include_path가 설정된 폴더에 압축해제하거나, 아예 include_path에 넣어준다. |
josso-php-partnerapp | agent 프로그램 기본 모듈, 실제 사용 | xampp/htdocs/josso-php-partnerapp 폴더로 압축해제 |
실제 배치된 파일들의 위치는 아래와 같다.
include_path = ".;C:\Tools\xampp\php\PEAR;C:\Tools\phpLibs" |
C:\Tools\phpLibs\josso-php-inc |
C:\Tools\xampp\htdocs\josso-php-partnerapp |
josso-login.php josso-logout.php josso-security-check.php |
약간의 편집작업이 필요하다. 위의 josso-php-partnerapp 폴더의 파일들을 모두 열어서 아래 행을 프로그램 첫 부분에 넣어준다.
include_once("josso-php-inc/josso.php"); |
자, 이제, 아래 URL을 열어본다. 심각한 에러 발생!
http://localhost/josso-php-partnerapp/josso-login.php
Fatal error: Cannot redeclare class soapclient
josso-php-inc에 포함된 nusoap이 문제다. soapclient 라는 클래스가 PHP 5.x 버전 내장 함수와 충돌한다. 해결책은?
- nusoap 파일에서 soapclient 클래스를 soapclientW로 고치라는 조언이 있다. [from: nusoap – Cannot redeclare class soapclient « blo9]
- ‘soapclientnusoap’로 클래스 이름을 바꾼 패키지. http://code.google.com/p/nusoap-for-php5/
- php.ini에서 php_soap.dll 로딩을 코멘트 처리하는 방법도 있다.
다소, 욱하지만, nusoap 파일들을 모두 열어서, 이름을 바꾸기로 하자.
JOSSO 실험: 동일 도메인 localhost
다시, 페이지를 열어본다.
http://localhost/josso-php-partnerapp/josso-login.php
위의 주소창을 잘 살펴보면, 뭔가 길게 자동으로 바뀌었음을 알 수 있다. 일단, tomcat으로 이동했고, 로그인 입력 화면으로 바뀌었다.
사용자 아이디와 패스워드를 입력: user1 user1pwd user2 user2pwd 아무거나 하나. 다시, 원래의 사이트로 되돌아 왔다. 발급받은 SSO Session 아이디는 아래와 같다.
위 페이지에서 쿠키값을 조사해보면 아래와 같다.
JSESSIONID=108F74E8CEE37C7F7723B5ACC25BB516; PHPSESSID=e1p5ar37it63ouidebvvc557o2; JOSSO_SESSIONID=2A9C149F0644E76B97AB5DBC20ECD69B |
현재, IDP(Identity Provider, 인증서버)와 SP(Service Provider, 서비스 서버, partnerapp 서버)가 모두 localhost라는 도메인을 가지고 있기 때문에, JSESSIONID, PHPSESSID, JOSSO_SESSIONID 모두 다 보인다.
쿠키 정보 추적을 위해, 좀더 편리한 firefox를 사용해보자.
http://localhost/josso-php-partnerapp/josso-login.php
로그인 완료후에 되돌아온 페이지, 새로 추가된 쿠키
아참, 여기서 궁금증. 어떻게 josso gateway는 php partnerapp에게 요청을 되돌려 줄 때, 원래 시작된 페이지 URL이 아닌 http://localhost/josso-php-partnerapp/josso-security-check.php 로 되돌려 준다는 걸 알고 있는 걸까? 그리고, josso_assertion_id=0B7ED2FE61F361EB 이건 뭘까?
우선, 소스 코드를 좀 보자.
josso-security-check.php |
include_once("josso-php-inc/josso.php"); // Resolve the assertion : $assertionId = $_REQUEST['josso_assertion_id']; $ssoSessionId = $josso_agent->resolveAuthenticationAssertion($assertionId); // Set SSO Cookie ... if (isset($backToUrl)) { // No page is stored, just display this one ... |
'josso_assertion_id'는 josso gateway에 인증이 확실한지를 다시 확인해보는 기능인 듯. 2번째 호출하면 금방 값의 유효성이 증발한다.
그리고, $_SESSION['JOSSO_ORIGINAL_URL']에 값이 설정되어 있으면, 원래의 페이지로 넘어갈 수 있다는 의미인 듯... 이건 어디서 설정해주는 걸까? 알았다.
JOSSO PHP 코드를 들여다 보니, 뭔가를 좀 알겠다.
josso.php |
이를테면, josso-security-check.php 가 gateway로부터의 통로가 되는 셈이다. 이 모듈을 통해서 ssoSessionId를 받아서, 서비스 서버에 쿠키로 심어주는 역할이다. 이 때, ssoSessionId 를 그냥 url 변수로 받으면 외부에 그대로 노출되어 위험하기 때문에, 'josso_assertion_id’ 를 통해서 받아서 그걸 입력으로 해서 gateway 서버와 soap 통신을 해서 ssoSessionId 받는다. 일종의 Injection을 수행해주는 모듈이다. 아마도 이 기능 때문에, cross domain sso가 가능한 것인 듯 싶다.
예제로 주어진 파일들이 josso_current_url 이란 변수를 입력으로 받아서 처리해주기 때문에...
간단하게 값을 덤프해주는 페이지를 하나 만들자. [아랫 부분에 sample로 제공되는 예제가 더 쉽다. 굳이 이 부분은 만들지 않아도 된다.]
dump.php |
<?php include_once("WLib/Utils.php"); Utils::dump($_REQUEST, '$_REQUEST'); |
WLib/Utils.php |
class Utils /** |
http://localhost/josso-php-partnerapp/josso-login.php?josso_current_url=http://localhost/josso-php-partnerapp/dump.php
로그인을 하게 되면, 아래 페이지로 되돌아온다. 그런데, 특이한 게 있다.
$_GET과 $_POST에는 값이 없음에도 불구하고, $_REQUEST에는 값이 버젓이 들어있다. 이거 언제 누가 넣은걸까? 쿠키가 설정되면, 자동으로 설정되는 것인 듯...
josso-security-check.php 중간에 잠깐 흐름을 끊어서 출력해봄.
JOSSO 실험: 다른 도메인 cross domain
만약, 인증서버와 서비스서버의 도메인이 서로 다르면 어떻게 될까? 실제 도메인을 등록해서 실험해도 좋겠지만, 간단하게 로컬에서만 실험할 것이므로, hosts 파일을 열어서 설정한다.
- windows > system32 > drivers > etc > hosts
- C:\WINDOWS\system32\drivers\etc\hosts
그리고, 실험을 좀더 간단하게 하기 위해,,, sample.php 페이지를 만든다. 소스 코드 압축파일 풀어놓은 곳에서 찾아보면,,,
C:\Tools\josso-1.8.0\dist\samples\apps\josso-partner-php-1.8.0-.zip 이라고 있다. 이 파일들을 htdocs/josso-php/ 폴더에 풀어놓자. [josso 라고 짧게 이름을 주면 좋겠지만, apache와 tomcat을 연동시켜 놓은 상태라면, tomcat에 이미 그 이름의 폴더가 있다. tomcat이 이긴다. php 파일이 없다고 나온다.]
index.php sample-ask-login.php |
두 파일 모두 편집기에서 열어서, 첫줄에 아래와 같이 추가해준다. josso agent 모듈의 경로를 지정해주는 일이다.
http://aaa.com/josso-php/ 제공된 링크를 눌러서 로그인하면 로그아웃을 위한 링크가 나온다. 누르면, 다시 로그인 링크 나오고...
도메인을 바꿔서 접속해보면, aaa.com 에서 이미 로그인 된 상태였더라도, bbb.com에서는 새로 로그인하라는 화면이 뜬다.
이것은, 정확히 ‘쿠키’가 없기 때문이다. aaa.com 에서는 이미 로그인했었으므로 ‘쿠키’가 있지만, bbb.com에서는 아직 ‘쿠키’가 없다. 로그인 링크를 눌러보자. 엇, 로그인 입력 화면이 안 뜨고 바로 로그인이 된 것으로 나온다. 인증서버엘 갔더니 이미 ‘쿠키’가 있어서, 바로 로그인 상태로 만들어진 것이다. 이 과정을 좀더 눈에 안뜨이게 할 수 있으면, cross domain sso의 최종적 완성이라고 할텐데... 이 예제에서는 반드시 로그인 링크를 눌러야만 한다.
조금 다른 예제를 살펴보자. (브라우저 쿠키를 모두 지우던가, 브라우저를 껐다가 새로 켠다.)
http://aaa.com/josso-php/index.php 이 페이지를 연 다음, 로그인 입력을 하고 로그인한다. 그 다음 아래 URL을 주소창에 그대로 쳐본다.
http://bbb.com/josso-php/sample-ask-login.php
바로 로그인이 되어 있는 상태로 나왔다. 어떻게 이게 가능한 것일까? 비밀은 소스에 있었다.
눈깜짝할 새에 벌써 저쪽 인증서버에 한 번 갔다온 것이다.
http://bbb.com/josso-php/index.php 다시, 이 페이지를 연 다음, 로그아웃을 한다. 그 다음 아래 URL을 주소창에 그대로 쳐본다.
http://bbb.com/josso-php/sample-ask-login.php 아래와 같이 로그인 요청 화면이 뜨면, 맞다.
http://aaa.com/josso-php/index.php 이 주소로 로그인하고, 탭을 열어서 아래 주소를 입력했다가, 다시 로그아웃하고, 아래 주소를 확인해보자.
http://bbb.com/josso-php/sample-ask-login.php 마찬가지로, 로그인되어 있을 때는 화면이 보였다가, 로그아웃 후에는 로그인 요청 화면이 보인다.
실험 결론
이로써, 크로스 도메인 SSO의 기본 기능이 모두 잘 작동한다.
참고문서
- http://www.jopenbusiness.com/mediawiki/index.php/JOSSO 한글문서, 설치와 설정에 관한 몹시 자세한 설명.
-
http://www.josso.org/ JOSSO 공식 사이트. 혹시 약자가 궁금하신 분을 위해. Java Open Single Sign-On = JOSSO.
2009년 8월 현재, 최신 버전은 1.8. 크로스 도메인 기능을 지원함. PHP, ASP, 클라이언트(에이전트) 모듈 제공
-------------------------------------------
FROM: https://blog.naver.com/joycestudy/100086695314
相关推荐
josso+Tomcat配置之josso服务器配置 josso是基于Java的单点登录(SSO)服务器,能够提供身份验证和授权服务。Tomcat是Apache软件基金会开发的开源Java servlet容器。配置josso服务器需要将josso war文件部署到...
一个开源的J2EE-based的SSO(SSO:单一登录技术是一种认证和授权机制,它允许注册用户只需要在任一成员网站上登录一次,而后授权访问其他连接的分支网站,无需再进行验证登录)基础结构.它的目的是提供一种用来解决在...
josso-1.8.0压缩包中可能包含以下组件和配置文件: 1. **JOSSO核心库**:包括Java类库和其他必要的资源文件,用于构建和运行SSO服务。 2. **Agent安装包**:用于在各个应用服务器上部署和配置Agent,以便与中央SSO...
- 配置文件`josso-gateway-config.xml`定义了Josso Gateway的行为,包括认证流程、会话管理和存储策略等。 - 数据库配置通过`josso-gateway-db-stores.xml`文件指定,包括数据库连接信息、表结构等。 4. **MySQL...
9.2.11章节主要讲解如何配置JOSSO以与Apache Tomcat协同工作,创建一个服务提供者(SP)与Tomcat执行环境之间的激活连接。这个过程的关键是确保SP是一个由Apache Tomcat托管的标准Java Web应用。当安全上下文建立后...
- 在`josso-gateway-db-stores.xml`中配置数据库信息,确保`db-store:jdbc-store`正确配置MySQL数据库的信息。 #### 五、MD5加密技术应用 为了提高数据的安全性,在数据库中存储用户密码时采用MD5加密算法是非常...
1. **配置 JOSSO**:首先需要在服务器上安装和配置 JOSSO。这包括设置 JOSSO 的基本参数、定义信任关系等。 2. **集成现有 Web 应用**:接下来,需要对现有的 Web 应用进行简单的配置,使其能够与 JOSSO 交互。这...
1. **配置**:设置JOSSO的配置文件以定义身份提供者、服务提供者和代理服务器的角色。这通常涉及URL映射、认证策略和证书管理。 2. **代理集成**:为每个需要SSO的服务提供者安装并配置JOSSO代理。这可能涉及到在...
安装完成后,可以导入库并根据文档或源代码示例来配置和使用SSO服务。 在实际项目中,这个库的应用场景广泛,例如,可以用于企业级的Web应用、内部系统或者多模块的大型项目。开发者可以利用其创建一个中央认证...
2. **配置文件**:JOSSO需要配置以适应具体环境,如服务器配置、身份验证策略、代理应用设置等。 3. **文档**:可能包含开发者指南、用户手册、API文档,帮助理解如何部署和使用JOSSO。 4. **库文件**:依赖的JAR...
这种方式使得权限管理更加灵活和可扩展,管理员可以根据角色设定不同的权限,而不是为每个用户单独配置。 5. **ACL(Access Control List)**:ACL 是一种用于定义对象访问权限的机制,它可以控制哪些用户或组可以...
CAS单点登录的经典配置,以及多数据库的处理方案 CAS单点登录是Single Sign-On(SSO)的一种实现,允许用户一次性进行认证之后,就访问系统中不同的应用;而不需要访问每个应用时,都重新输入密码。CAS单点登录产品...
4. **客户端集成**:每个需要SSO功能的应用需要配置为CAS客户端,这通常涉及修改应用的配置文件,指示它们信任CAS服务器,并处理票证验证。 5. **信任关系建立**:在不同系统之间建立信任,确保CAS服务器能够验证...
Atricore的JOSSO是一种开源且受商业支持的Internet单点登录(FSSO)解决方案,用于点击和基于标准(SAML2)的Internet规模SSO实施。 欲了解更多信息,请通过以下网址与我们联系:http://www.josso.org
- JOSSO、OpenNMS、AppFuse 等第三方认证服务 2. 简化配置与依赖注入 Spring Security 通过依赖注入原理简化了安全配置,使得开发者可以更轻松地集成和自定义安全组件。传统的 Spring Bean 配置方式往往需要手动...
此外,它还可以与其他流行的安全框架或工具结合使用,例如JOSSO、OpenNMS Network Management Platform等。 **4.1 扩展认证机制** Spring Security支持多种认证机制的扩展,如透明身份验证上下文传播、自动“记住...
例如,CAS以其先进的设计理念、合理的架构、简单的配置和广泛的客户端支持受到青睐,被认为是最优秀的开源SSO解决方案之一。 **SSO的实现机制**主要有两种:Cookie机制和Session机制。WebLogic采用Session共享认证...
6. 使用反向代理模块可实现多层SSO认证,每层可配置不同验证模式。 7. 支持多种存储用户信息的方式,如数据库、LDAP和XML。 8. 提供PHP和ASP的API接口。 9. 兼容JBoss 3.2.6和Jakarta Tomcat 5.0.27以上版本。 然而...
- **JOSSO (Java Open Source Single Sign On)**:开源单点登录框架。 - **OpenNMS Network Management Platform**:开源的网络管理系统。 - **AppFuse**:快速开发 Web 应用的框架。 - **AndroMDA**:面向模型的...
3. **配置信任关系**:配置CAS服务器和应用程序之间的信任关系,包括设置CAS服务器的URL、证书等信息。 4. **测试和调整**:完成集成后,进行详细的测试以确保SSO功能正常工作,根据测试结果进行必要的调整。 ...