HowTos/SWAでSingle Sign-Onを行う方法

出典: ScalixWikiJP

Scalix Wiki -> How-Tos -> HowTos/SWAでSingle Sign-Onを行う方法

Scalix Web AccessはSingle Sign-Onのインターフェースを直接的には用意していません。 しかし、Single Sign-On的に認証を省略させることは条件を満たせば可能です。

目次

Single Sign-Onの動作原理

Scalix Web AccessではURLのパス/webmail/index.jspに対してフォームのパラメータとしてusernameにユーザIDを、passwordにパスワードを設定してPOSTするとログインすることができます。

Single Sign-Onを行いたい場合はこの動作を利用します。

Single Sign-Onの条件

Single Sign-Onを行うためにはサーバ側で以下の条件が必要です。

  • HTTPSで通信が暗号化されていること
  • ポータルサイト側からアクセスしているユーザのユーザIDを取得できること
  • ユーザIDを用いて認証サーバ(LDAP等)から平文のパスワードを取得可能であること

なお、Scalix Web Accessはバックエンドでユーザ毎にIMAP4/SMTP/LDAPサーバに接続するため、認証が必要です。 そのため、ユーザIDとパスワードをどこからか取得する必要があります。

Single Sign-Onの実装方法

Scalix Web Accessのログイン画面を利用せずに、別途ログイン画面を用意することでSingle Sign-Onを実現できます。

CGIやサーブレットなどで、フォームのパラメータにユーザIDとパスワードをhidden属性で埋め込んだログイン画面を生成し、/webmail/index.jspに対してPOSTするようにします。 そうすれば、ユーザはSubmitボタンを押すだけで、ユーザIDとパスワードを再び入力することなしにログインを行うことが可能です。

次のはPerlで書いたログイン画面を生成するCGIの一部です。

print header(-type=>'text/html', -charset=>'utf-8');
print <<EOF
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Scalix Web Accessの入り口</title>
</head>
<body>
<form action="https://webmail.example.org/webmail/index.jsp" method="post">
<input type="hidden" name="username" value="${user}" />
<input type="hidden" name="password" value="${password}" />
<input type="submit" value="SWAのページに行く" />
</form>
</body>
</html>
EOF

具体的な手順は次の通りです。

  1. ウェブサーバ(環境変数REMOTE_USER)やポータルサイト等からユーザIDを取得する。
  2. 認証サーバ(LDAPサーバ等)にユーザIDのユーザを検索して、平文のパスワードを取得する。
  3. フォームのパラメータusernameとpasswordにユーザIDとパスワードを埋め込んだHTMLページを生成し、表示する。
  4. ユーザがsubmitしたら、SWAのログインページにパラメータusernameとpasswordがPOSTされる。
  5. SWAはPOSTされたusernameとpasswordを用いて、バックエンドのIMAP4サーバに接続し、認証を行う。
  6. IMAP4サーバへの認証が成功するため、SWAはログイン画面を省略し、SWAの画面をポップアップする。

なお、パスワードが平文で埋め込まれるため、セキュリティ上注意が必要です。そのため、HTTPSで通信することが必須です。

連携例

サイボウズ ガルーン2

サイボウズ ガルーン2ではポートレットの機能を使うと、シングルサインオンが可能になります。

HTMLポートレットの設定において、"ポートレットの内容"に次のようなテキストを登録すると、Scalix Web Accessの画面を立ち上げるボタンを表示できます。

<form action="https://webmail.example.org/webmail/index.jsp" method="post" target="swa">
<input type="hidden" name="username" value="%Account%">
<input type="hidden" name="password" value="%Password%">
<input type="submit" value="ウェブメールを開く">
</form>