SAML SPをつくろう 【Java Servlet編】

schedule 2019/11/08  refresh 2024/02/01

目的

SeciossLinkで認証したユーザーでJava Servletで作ったWebアプリケーションにSSOする。

 

構成

SeciossLinkとSAML Service ProviderとのSAML認証は Apache httpd と mod_auth_mellon を使います。


Java ServletコンテナとしてApache Tomcatを使用し、Apache httpd と Apache Tomcat 間の連携には AJP(Apache Jserv Protocol)を使用します。

 

前提

SAML SPをつくろう 【mod_auth_mellon編】の構築が行われていることを本稿の前提条件とします。

 

構築手順

1. 環境設定

CentOSにtomcatをインストールします。

# yum install tomcat

 

2. Apache Tomcatの設定

標準でAJPは有効な状態なので、一行だけ修正してTomcatでの認証を無効化します。

# vi /etc/tomcat/server.xml

 

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" tomcatAuthentication="false" /></code>

 

tomcat を起動します。

# systemctl start tomcat

 

3. Apache httpdの設定

以前、作成した mellon.conf にAJPへのリバースプロキシー設定を追加します。

 

# vi /etc/httpd/conf.d/mellon.conf

 

<Location />
MellonEndpointPath "/mellon"
MellonIdPMetadataFile /etc/httpd/metadata/SlinkMetadata.xml
MellonSPPrivateKeyFile /etc/httpd/metadata/https_centos_.int.secioss.work_samlsp.key
MellonSPCertFile /etc/httpd/metadata/https_centos_.int.secioss.work_samlsp.cert
MellonSPMetadataFile /etc/httpd/metadata/https_centos_.int.secioss.work_samlsp.xml
</Location>

<Location /mellon>
AuthType "Mellon"
Require valid-user
MellonEnable "auth"
</Location>

Alias /app /var/www/app
<Location /app>
AuthType "Mellon"
Require valid-user
MellonEnable "auth"
</Location>

<Location /servlet>
AuthType "Mellon"
Require valid-user
MellonEnable "auth"
ProxyPass ajp://localhost:8009/
</Location>

※ /servlet は検証ページのパスです。

 

httpd を再起動します。

 

# systemctl restart httpd

 

 

4. SeciossLinkの設定

以前、設定したSAML SPの設定を一部変更します。

 

項目名

設定値

サービスID mellon  ※変更なし
サービス名 mellon  ※変更なし
エンティティID https://centos76.int.secioss.work/samlsp
※変更なし
Assertion Consumer Service https://centos76.int.secioss.work/mellon/postResponse
※変更なし
ログアウトURL https://centos76.int.secioss.work/mellon/logout
※変更なし
アクセス先URL https://centos76.int.secioss.work/servlet/
※Java Servlet用の検証ページに変更します。
IDの属性 urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
※変更なし

 

登録したSAML SPをユーザーに割り当てます。
以前、設定済みでしたら変更する必要はありません。

 

 

5. 動作確認

テスト用ページの作成します。
ちょっと手抜きをして、JSPだけの検証ページです。

 

# mkdir /var/lib/tomcat/webapps/ROOT
# /var/lib/tomcat/webapps/ROOT/index.jsp
 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<h1>こんにちは <%=request.getUserPrincipal().getName()%> さん</h1>
</body>
</html>

 

SAML認証したユーザIDは HttpServletRequest#getUserPrincipal() に設定されているので、それを表示しています。

 

ブラウザでアクセスURLにアクセスすると、SeciossLinkのログイン画面にリダイレクトされ、
ログインすると以下のような画面が表示されます。

 

https://centos76.int.secioss.work/servlet/

 

SimpleSAMLphpを使ってSAMLに対応したサイトを作ろう-6

 

 

このようにAJPを使ったリクエストの送信ではREMOTE_USERなど限られた情報しか渡せませんが、少ない修正で簡単にSAML連携ができます。

 

それではまた。

 

 

SeciossLinkは、Java Servletで作成したWebアプリケーションにSSOすることが可能です。

ユーザーが安全にWebアプリケーションへアクセスできるため、ぜひ一度お試しください。