`

JOSSO Gateway Java 源码分析

阅读更多

웹 서비스 포인트 분석

 

josso-php-inc/class.jossoagent.php 파일 내용을 보면, 아래와 같이 모두 세 개의 웹 서비스 포인트가 있다.

  • /josso/services/SSOIdentityManager?wsdl
  • /josso/services/SSOIdentityProvider?wsdl
  • /josso/services/SSOSessionManager?wsdl

 

각각 아래와 같이 접속하면, wsdl 파일이 나온다.

 

http://localhost:8080/josso/services/SSOIdentityManager?wsdl

http://localhost:8080/josso/services/SSOIdentityProvider?wsdl

http://localhost:8080/josso/services/SSOSessionManager?wsdl

 

이 가운데에서 가장 중점적으로 분석해볼 대목은, 아래와 같다.

 

accessSession : 이 웹 서비스를 호출하는 것만으로 인증서버측 JOSSO 세션이 연장됨. 어떻게?

resolveAuthenticationAssertion : assertionId를 one-time token으로 삼아 JOSSO 세션의 유효성 검증. 2번째 호출시에는 차단됨. 어떻게?

 

자세한 분석을 위해, 소스 코드를 다운로드 받아서 살펴본다.

 

소스 코드 다운로드 위치:

 

 

accessSession()

 

accessSession() 함수가 구현된 소스 위치:

 

$ grep -ir "implements SSOSessionManager" *
josso-1.8.0-src/components/josso-default-sessionmgr/src/main/java/org/josso/gateway/session/service/SSOSessionManagerImpl.java

 

josso-1.8.0-src/core/josso-core/src/main/java/org/josso/gateway/session/service/BaseSessionImpl.java

 

위의 소스를 보면, accessSession() 함수를 호출하면, session의 _lastAccessedTime 이 연장됨을 알 수 있다.

 

 

resolveAuthenticationAssertion()

 

resolveAuthenticationAssertion 함수를 찾아보자. SSOIdentityProvider 는 어디에?

 

$ grep -ir "implements SSOIdentityProvider" *

josso-1.8.0-src/components/josso-default-identityprovider/src/main/java/org/josso/gateway/identity/service/SSOIdentityProviderImpl.java

 

$ grep -ir "AssertionManager" *

josso-1.8.0-src/components/josso-default-assertionmgr/src/main/java/org/josso/gateway/assertion/AssertionManagerImpl.java

 

_assertionStore 에서 AuthenticationAssertion를 빼내서 검사하다가 맞으면, remove 하기 때문에, 1번만 유효하고 2번째 호출에서는 아무것도 나오지 않는 것임.

 

 

findUserInSession()

 

class.jossoagent.php에서 가장 빈번하게 사용하는 findUserInSession 함수도 찾아서 분석해보자.

 

SSOIdentityManager 에 들어있는 것이므로, 찾아야 할 것은, SSOIdentityManagerImpl 이다. (꽤, 규칙적이다.)

 

$ grep -ir "SSOIdentityManagerImpl" *

josso-1.8.0-src/components/josso-default-identitymgr/src/main/java/org/josso/gateway/identity/service/SSOIdentityManagerImpl.java

 

얼추, 잘하면, 아예 JOSSO의 Gateway 부분을 PHP로도 변환해서 구현할 수도 있겠다. 세션 객체에 대한 가비지 콜렉션을 어떻게 할 것인지, session hijacking이나 session fixation 공격에 어떻게 대응할 것인지, 로그인 과정중에 흐름이 끊어진 Form 변수를 어떻게 보관하고 인출할 것인지, 등등 몇가지 문제들에 대해서만 보완하면, 뭐, 못할 것도 없어 보인다.

 

-----------

FROM: https://blog.naver.com/joycestudy/100087263766

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics