이 글은, 실험적인 내용을 그대로 기록한 것이라서, 다소 장황함. 설치에 대한 요약본은 아래 링크 참조할 것!
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-1.8.0压缩包中可能包含以下组件和配置文件: 1. **JOSSO核心库**:包括Java类库和其他必要的资源文件,用于构建和运行SSO服务。 2. **Agent安装包**:用于在各个应用服务器上部署和配置Agent,以便与中央SSO...
- 配置文件`josso-gateway-config.xml`定义了Josso Gateway的行为,包括认证流程、会话管理和存储策略等。 - 数据库配置通过`josso-gateway-db-stores.xml`文件指定,包括数据库连接信息、表结构等。 4. **MySQL...
- 在`josso-gateway-db-stores.xml`中配置数据库信息,确保`db-store:jdbc-store`正确配置MySQL数据库的信息。 #### 五、MD5加密技术应用 为了提高数据的安全性,在数据库中存储用户密码时采用MD5加密算法是非常...
计算机二级公共基础知识模 拟试题及答案详解.pdf
内容概要:本文档详细介绍了语音发射机的设计与实现,涵盖了从硬件电路到具体元件的选择和连接方式。文档提供了详细的电路图,包括电源管理、信号处理、音频输入输出接口以及射频模块等关键部分。此外,还展示了各个引脚的功能定义及其与其他组件的连接关系,确保了系统的稳定性和高效性能。通过这份文档,读者可以全面了解语音发射机的工作原理和技术细节。 适合人群:对电子工程感兴趣的初学者、从事嵌入式系统开发的技术人员以及需要深入了解语音发射机制的专业人士。 使用场景及目标:适用于希望构建自己的语音发射设备的研究人员或爱好者,帮助他们掌握相关技术和实际操作技能。同时,也为教学机构提供了一个很好的案例研究材料。 其他说明:文档不仅限于理论讲解,还包括具体的实施步骤,使读者能够动手实践并验证所学知识。
内容概要:本文详细介绍了用易语言编写的单线程全功能注册机源码,涵盖了接码平台对接、滑块验证处理、IP代理管理以及料子导入等多个核心功能。文章首先展示了主框架的初始化配置和事件驱动逻辑,随后深入探讨了接码平台(如打码兔)的API调用及其返回数据的处理方法。对于滑块验证部分,作者分享了如何利用易语言的绘图功能模拟真实用户的操作轨迹,并提高了验证通过率。IP代理模块则实现了智能切换策略,确保代理的有效性和稳定性。此外,料子导入功能支持多种格式的数据解析和去重校验,防止脏数据污染。最后,文章提到了状态机设计用于控制注册流程的状态持久化。 适合人群:有一定编程基础,尤其是熟悉易语言的开发者和技术爱好者。 使用场景及目标:适用于希望深入了解易语言注册机开发的技术细节,掌握接码、滑块验证、IP代理等关键技术的应用场景。目标是帮助读者理解并优化现有注册机的功能,提高其稳定性和效率。 其他说明:文中提到的部分技术和实现方式可能存在一定的风险,请谨慎使用。同时,建议读者在合法合规的前提下进行相关开发和测试。
计算机绘图实用教程 第三章.pdf
计算机辅助设计—AutoCAD 2018中文版基础教程 各章CAD图纸及相关说明汇总.pdf
C++相关书籍,计算机相关书籍,linux相关及http等计算机学习、面试书籍。
计算机二级mysql数据库程序设计练习题(一).pdf
计算机发展史.pdf
计算机二级课件.pdf
计算机概论第三讲:计算机组成.pdf
内容概要:本文档由中国移动通信集团终端有限公司、北京邮电大学、中国信息通信研究院和中国通信学会共同发布,旨在探讨端侧算力网络(TCAN)的概念、架构、关键技术及其应用场景。文中详细分析了终端的发展现状、基本特征和发展趋势,阐述了端侧算力网络的定义、体系架构、功能架构及其主要特征。端侧算力网络通过整合海量泛在异构终端的算力资源,实现分布式多级端侧算力资源的高效利用,提升网络整体资源利用率和服务质量。关键技术涵盖层次化端算力感知图模型、资源虚拟化、数据压缩、多粒度多层次算力调度、现场级AI推理和算力定价机制。此外,还探讨了端侧算力网络在智能家居、智能医疗、车联网、智慧教育和智慧农业等领域的潜在应用场景。 适合人群:从事通信网络、物联网、边缘计算等领域研究和开发的专业人士,以及对6G网络和端侧算力网络感兴趣的学者和从业者。 使用场景及目标:适用于希望深入了解端侧算力网络技术原理、架构设计和应用场景的读者。目标是帮助读者掌握端侧算力网络的核心技术,理解其在不同行业的应用潜力,推动端侧算力网络技术的商业化和产业化。 其他说明:本文档不仅提供了端侧算力网络的技术细节,还对其隐私与安全进行了深入探讨
学习java的心得体会.docx
计算机二级考试(南开100题齐全).pdf
内容概要:本文详细介绍了计算机二级C语言考试的内容和备考方法。首先概述了计算机二级考试的意义及其在计算机技能认证中的重要性,重点讲解了C语言的基础语法,包括程序结构、数据类型、运算符和表达式等。接着深入探讨了进阶知识,如函数、数组、指针、结构体和共用体的应用。最后分享了针对选择题、填空题和编程题的具体解题技巧,强调了复习方法和实战演练的重要性。 适合人群:准备参加计算机二级C语言考试的学生和技术爱好者。 使用场景及目标:①帮助考生系统地掌握C语言的核心知识点;②提供有效的解题策略,提高应试能力;③指导考生制定合理的复习计划,增强实战经验。 其他说明:本文不仅涵盖了理论知识,还提供了大量实例代码和详细的解释,有助于读者更好地理解和应用所学内容。此外,文中提到的解题技巧和复习建议对实际编程也有很大帮助。
论文格式及要求.doc
内容概要:本文详细介绍了如何使用三菱FX3U PLC及其485BD通信板与四台台达VFD-M系列变频器进行通信的设置与应用。主要内容涵盖硬件连接注意事项、通信参数配置、RS指令的应用、CRC校验算法的实现以及频率给定和状态读取的具体方法。文中提供了多个实用的编程示例,展示了如何通过梯形图和结构化文本编写通信程序,并讨论了常见的调试技巧和优化建议。此外,还提到了系统的扩展性和稳定性措施,如增加温度传感器通信功能和应对电磁干扰的方法。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些熟悉三菱PLC和台达变频器的使用者。 使用场景及目标:适用于需要实现多台变频器联动控制的工业应用场景,旨在提高生产效率和系统可靠性。通过学习本文,读者可以掌握如何构建稳定的RS485通信网络,确保变频器之间的高效协同工作。 其他说明:本文不仅提供了详细的理论指导,还包括了许多来自实际项目的经验教训,帮助读者避免常见错误并提升编程技能。
计算机服务规范.pdf