欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JOSSO: Single Sign On, Cross Domain JOSSOSSO

程序员文章站 2022-06-14 12:36:33
...

아주 오래전에 SSO 관련 솔루션을 찾아보다가, JOSSO를 들여다 본 적이 있었다. 2006년 9월. 그때의 JOSSO 버전이 1.4. 그로부터 시간이, 아니 세월이 많이 흘렀다. 그동안 JOSSO 역시 꽤 많은 변화를 겪었다. 무엇보다도 예전에는 전혀 지원하지 않던 Cross Domain SSO를 이젠 지원한다고 한다. 도메인이 서로 달라도, SSO가 된단다. 그 원리가 문득 궁금해졌다.

 

 

  • http://www.josso.org/ JOSSO 공식 사이트. 혹시 약자가 궁금하신 분을 위해. Java Open  Single Sign-On = JOSSO.
    2009년 8월 현재, 최신 버전은 1.8. 크로스 도메인 기능을 지원함. PHP, ASP, 클라이언트(에이전트) 모듈 제공

 

JOSSO: Single Sign On, Cross Domain
            
    
    
        JOSSOSSO

 

JOSSO: Single Sign On, Cross Domain
            
    
    
        JOSSOSSO

 

http://www.josso.org/confluence/display/JOSSO1/Architecture+Overview 아키텍춰 개요

 

문서가 생각보다 복잡하다. 너무 멋있게 포장하려고 한 것 같다.

 

 

하지만, 생각보다 간단하다. PHP에서 사용하는 샘플을 보자.

 

 

Sample page

index.php

 

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
	<title>Sample Partner Application - JOSSO</title>
	<meta name="description" content="Java Open Single Signon">
</head>

<body>
    <h1>This is a very simple PHP JOSSO partner application</h1>
<?php

// jossoagent is automatically instantiated by josso.php,
// declared in auto_prepend_file property of php.ini.
// If you do not use auto_prepend feature, include josso.php in all your pages

// Get current SSO User and SSO Session information,
$user = $josso_agent->getUserInSession();
$sessionId = $josso_agent->getSessionId();

// Check if user is authenticated
if (isset($user)) {

    // Display USER INFORMATION

    // Username associated to authenticated user
    echo 'Username : ' . $user->getName() . '<br><br>';

    // Get a specific user property
    echo 'user.name=' . $user->getProperty('user.name') . '<br><br>';

    // Get all user properties
    $properties = $user->getProperties();
    if (is_array($properties)) {
        foreach ($properties as $property) {
            echo $property['name'] . '=' . $property['value'] . '<br>';
        }
    }

	// Get all user roles
	$roles = $josso_agent->findRolesBySSOSessionId($sessionId);
	echo '<h2>Roles</h2>';
	foreach ($roles as $role) {
		echo $role->getName() . '<br>';
	}

	// Check if user belongs to a specific role
	if ($josso_agent->isUserInRole('role1')) {
		echo '<h3>user is in role1</h3>';
	}

	echo 'Click <a href="'.jossoCreateLogoutUrl().'">here</a> to logout ...<br>';

	echo '<p>SSO Session ID : ' . $sessionId . '</p>';


} else {

    // User is unknown..
    echo '<h2>you are an annonymous user ...</h2>';

	echo 'Click <a href="'.jossoCreateLoginUrl().'">here</a> to login ...';

}
?>

</body>
</html>

 

중간에 괜히 복잡하게 보이는 부분은, user의 role(역할)과 property(속성)을 가져와서 보여주려 하기 때문이고, 실제로는 아주 간단하다.

 

$user = $josso_agent->getUserInSession();
$sessionId = $josso_agent->getSessionId();

// Check if user is authenticated
if (isset($user)) {
	echo 'Click <a href="'.jossoCreateLogoutUrl().'">here</a> to logout ...<br>';
	echo '<p>SSO Session ID : ' . $sessionId . '</p>';
} else {
    // User is unknown..
	echo '<h2>you are an annonymous user ...</h2>';
	echo 'Click <a href="'.jossoCreateLoginUrl().'">here</a> to login ...';
}
 
사용자(user)의 세션(session)이 세션 서버에 있는지를 검사하면, 끝이다.
그런데, 사이트의 문서를 아무리 들여다 봐도, cross domain의 원리에 대해서는 나와 있는 게 없다. 
결국, 소스를 설치해서 뜯어봐야 알 수 있을 듯...

 

-------------------------------------

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

相关标签: JOSSO SSO