2010. 9. 16. 15:21
JOSSO를 통한 SSO 구현하기
2010. 9. 16. 15:21 in 팁&테크/Linux
먼저 아래테이블을 보고 설치할 플랫폼을 알아보자.
Gateway는 Server 라고 생각하면 되고 Agent는 Client 라 생각하면 된다.
Platform | Agent (SP) | Gateway (IdP) |
---|---|---|
JBoss 5.x | ||
JBoss 4.2.x | ||
JBoss 4.0.x | ||
JBoss 3.2.6+ | ||
Tomcat 6.0 | ||
Tomcat 5.5 | ||
Tomcat 5.0 | ||
Weblogic 10.0 | ||
Weblogic 9.2 | ||
Websphere CE | ||
Geronimo 2.1 | ||
Generic J2EE / JEE | ||
Jetty 6.x | ||
Apache 2.2 (php, perl, python, ...) | ||
PHP 4.x,5.x | ||
Microsoft IIS (ASP, .NET, ...) | ||
Liferay 5.2.x | ||
Alfresco 3.3 | ||
phpBB |
먼저 나는 SSO Gateway 로는 Centos 5.5 리눅스에 Tomcat 5.5 를 YUM(rpm)으로 설치를 한 상태이다.
그래서 Tomcat 5.5 Gateway를 설치했다. Agent 는 PHP 를 사용할 것이다.
아 그리고 톰캣이 설치되있으니 jdk 역시 설치되어있다. jdk 역시 YUM(rpm)으로 설치가 되 있다.
아래에 나오는 모든 경로는 YUM으로 설치시 설정되는 경로이다. 소스로 설치를 하였다면 해당 경로로 변경해야 한다.
Tomcat 5.5를 다운받아서 서버에서 압축을 해제하고 디렉토레를 보면 /bin 디렉토리가 있는데
그곳에 리눅스용 실행파일이 있다. 필자의 경우에는 josso-gsh 라는 이름으로 쉘 파일이 존재하고 .bat 파일도 있는데 이것은 윈도우용이라 생각된다. 그리고 실행전 반드시 $JAVA_HOME 이 설정되어 있어야 한다.
josso-gsh 를 실행하면 다시 josso> 라는 코맨드라인이 생기고 아래 명령을 실행해 Gateway를 설치하면 된다.
gateway install --target /usr/share/tomcat5 --platform tc55
여기서 --target에는 tomcat 설치 디렉토리를 --platform 에는 톰캣 버젼을 넣으면 된다.
YUM으로 설치시에 기본 디렉토리는 위와같이 /usr/share/tomcat5 이고 내용을 보면 대부분 다른 경로로 링크가 걸린 디렉토리 이다.(깔아보면 무슨말인지 알것임)
그리고 톰캣6.0을 사용한다면 --platform 에 값을 tc60으로 하면 된다.
그리고 Gateway는 기본적으로 MySql을 사용하므로 설치되어 있지 않다면 YUM으로 설치를 하자.
yum install mysql mysql-server mysql-devel
이제 josso에서 사용할 데이타베이스가 필요한데 데이타베이스를 생성하고 아래와 같이 테이블을 생성하자.
당연히 사용자도 추가해야함.
DROP TABLE IF EXISTS `josso_role`;
CREATE TABLE `josso_role` (
`name` VARCHAR(16) NOT NULL,
`description` VARCHAR(64) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=INNODB DEFAULT CHARSET=euckr;
DROP TABLE IF EXISTS `josso_user`;
CREATE TABLE `josso_user` (
`login` VARCHAR(16) NOT NULL,
`passwd` VARCHAR(20) NOT NULL,
`name` VARCHAR(64) DEFAULT NULL,
`description` VARCHAR(64) DEFAULT NULL,
PRIMARY KEY (`login`)
) ENGINE=INNODB DEFAULT CHARSET=euckr;
DROP TABLE IF EXISTS `josso_user_property`;
CREATE TABLE `josso_user_property` (
`login` VARCHAR(16) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`value` VARCHAR(255) NOT NULL,
PRIMARY KEY (`login`,`name`),
CONSTRAINT `josso_user_property_ibfk_1`
FOREIGN KEY (`login`) REFERENCES `josso_user` (`login`)
) ENGINE=INNODB DEFAULT CHARSET=euckr;
DROP TABLE IF EXISTS `josso_user_role`;
CREATE TABLE `josso_user_role` (
`login` VARCHAR(16) NOT NULL,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`login`,`name`),
KEY `name` (`name`),
CONSTRAINT `josso_user_role_ibfk_2`
FOREIGN KEY (`login`) REFERENCES `josso_user` (`login`),
CONSTRAINT `josso_user_role_ibfk_1`
FOREIGN KEY (`name`) REFERENCES `josso_role` (`name`)
) ENGINE=INNODB DEFAULT CHARSET=euckr;
그다음은 josso에서 사용할 JDBC 드라이버를 설치해보자.
MySQL JDBC Driver
다운로드 사이트 에가서 JDBC Driver for MySql 파일을 받고 서버에서 압축 풀어서
mysql-connect-java-???.jar 파일을 /usr/share/tomcat5/webapps/josso/WEB-INF/lib 경로에 복사를 하자.
그 다음은 사용자의 로그인 정보를 어느 방식으로 저장하고 사용할지를 설정해야 한다. 보통 MySql을 사용하지만 메모리를 사용할수도 있다.
/usr/share/tomcat5/common/classes/josso-gateway-config.xml 파일을 열어 아래 라인을 다음과 같이 고치도록 하자.
<!-- Identity, Session and Assertion Stores configuration -->
<s:import resource="josso-gateway-stores.xml" />
이부분을
<s:import resource="josso-gateway-db-stores.xml" />
이렇게 수정을 하면 기본적으로 메모리에 저장되도록 되있는 부분을 DB로 변경하게 된다.
그럼 위에 설정한 josso-gateway-db-stores.xml 파일에 MySql 계정 설정을 아래와 같이 하자.
<db-istore:jdbc-store
id="josso-identity-store"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/데이타베이스명"
connectionName="아이디"
connectionPassword="비번"
userQueryString="SELECT LOGIN AS NAME FROM JOSSO_USER WHERE LOGIN = ?"
rolesQueryString="SELECT NAME AS ROLE FROM JOSSO_USER_ROLE WHERE LOGIN = ?"
credentialsQueryString="SELECT LOGIN AS USERNAME, PASSWD password FROM JOSSO_USER WHERE LOGIN = ?"
userPropertiesQueryString="SELECT NAME, VALUE FROM JOSSO_USER_PROPERTY WHERE LOGIN = ?"
resetCredentialDml="UPDATE JOSSO_USER SET PASSWD = ? WHERE LOGIN = ?"
relayCredentialQueryString="SELECT LOGIN FROM JOSSO_USER WHERE #?# = ?"
/>
자 Gateway 마지막으로 josso-gateway-auth.xml 파일에서 기본인증정보를 수정한다.
hashAlgorithm, hashEncoding를 삭제하여 암호를 일반텍스트로 저장하도록 하자.
<basic-authscheme:basic-auth-scheme
id="josso-basic-authentication"
ignorePasswordCase="false"
ignoreUserCase="false">
<basic-authscheme:credentialStore>
<s:ref bean="josso-identity-store"/>
</basic-authscheme:credentialStore>
<basic-authscheme:credentialStoreKeyAdapter>
<s:ref bean="josso-simple-key-adapter"/>
</basic-authscheme:credentialStoreKeyAdapter>
</basic-authscheme:basic-auth-scheme>
오늘은 여기까지. 작업이 끝나면 이미지도 올리고 다시 정리를 할것임.