EMIT-Japan WebCT レター

  • 登録・解除
  • プライバシーポリシー

【管理者向けミニティップス】WebCTのオートサインオン機能を利用してみる

WebCTにはオートサインオンという機能があり、外部アプリケーションからログイン画面を経由する事なくログインするいわゆる「シングルサインオン」を実現する事が出来ます。ただし、これを実行するには「Institution」のライセンスが必要になりますので注意してください。この文書の最後に「オートサインオン」を利用した弊社製品を2つ紹介しています。

IMS IDの取得

まず、オートサインオン機能を利用するにあたってIMS IDと呼ばれるIDを取得する必要があります。IMS IDグローバルデータベース内のWebCT IDとは別に管理されるIDで、WebCT IDと同じくユニークな値を保持しています。このIDは管理者インタフェースでユーザの作成を行うとWebCT内部で自動的に作成されるものです。

WebCT ID <-> IMS IDの変換はIMS Enterprise APIを用いて行う事が出来ます。IMS Enterprise APIを利用するにはまず以下のディレクトリにcdする必要があります。

cd $webct_root/webct/webct/generic/ims/

$webct_rootはWebCTをインストールしたディレクトリを差します。このディレクトリにあるep_api.plというのがIMS Enterprise APIの実体です。

WebCT IDからIMS IDへの変換を行うには以下の書式で実行します。

ep_api.pl configure get_person_ims_info <変換したいWebCT ID>

以下は実行例です。

$ ./ep_api.pl configure get_person_ims_info fukuyama
Retrieving person_ims_info for Global ID (fukuyama).
Success: IMS id="25CA0D3F066CF12B21CBADEC6E651775". IMS source="WebCT"

成功するとこのようにWebCT ID fukuyama から IMS ID 25CA0D3F066CF12B21CBADEC6E651775を得る事が出来ます。失敗すると以下のように表示されます。

$ ./ep_api.pl configure get_person_ims_info fukuyama1
Retrieving person_ims_info for Global ID (fukuyama1).
Fatal Failure(99): Get_person_ims_info for Global ID (fukuyama1) failed. Global ID does not exist.
Fatal error occurred. Process is INCOMPLETE. Please check /home/webct/webct_root/webct/webct/generic/logs/ims_log.txt for more details.

オートサインオン共有値の設定

かつてスタンダードAPIをhttp経由で利用するというTipsを公開した時に、「共有秘密値(Shared Secret Value)」というものを設定しました。オートサインオンでも基本的にこの仕組みを用いてシングルサインオンしますが、API用のファイルと鍵ファイルの位置が異なる事に注意してください。

API用の鍵ファイルは以下のパスになります。

$webct_root/webct/webct/generic/api/api_secret

それに対しオートサインオン用の鍵ファイルは以下のパスに存在します。

$webct_root/webct/webct/generic/autosignon/autosignon_secret

設定の仕方はAPIと全く同じです。基本的にecho -nした結果をリダイレクトすれば問題無いでしょう。ここで適当な値をautosignon_secretファイルに書きこんでおきます。

以下は例です

$ echo -n hogehoge > autosignon_secret

オートサインオンURLを作る

ここまでで前準備は終わりです。実際にジャンプするにはWebCTへのオートサインオンリンクを作る必要があります。オートサインオンリンクのベースは以下のURLになります。

http://$server:$port/webct/public/autosignon

実際この段階でアクセスすると以下のようなエラーが表示されるだけになります。

Error: Missing required arguments. 

ここに以下のようなパラメータを付けてアクセスする事でSSOする事が出来ます。

  • IMS id => IMS ID
  • Time Stamp => 現在のUnixタイムスタンプ
  • URL => ログイン後ジャンプするURL。コースの指定も可* MAC => 上記3つのパラメータ+共有秘密値から算出された暗号コード(Message Authentication Code)

このうちIMS idは既に先の手順で入手しています。

「Time Stamp」の値はdate +%s等のコマンドで得る事が出来ます。

$ date +%s
1116398633

URLはmyWebCTを指定してみる事にしましょう。myWebCTへのパスは以下のようになります。

http://$server:$port/webct/homearea/homearea

今回は例としてhttp://www.example.com:8900/webct/homearea/homeareaとしてみます。

最後のMACですが、これは スタンダードAPIをhttp経由で利用する で行った算出法と同じです。get_md5(.exe)というコマンドで得る事が出来ます。自前で計算する事も出来ますが、今回はget_md5を利用してみましょう。

まず以下のディレクトリにcdします。

cd $webct_root/webct/webct/generic/api/

get_md5の利用方法は以下の通りでした。

get_md5 <共有秘密値のファイル> <パラメータの連結値>

つまり、今回実行するコマンドは以下のようになります。


$ ./get_md5 ../autosignon/autosignon_secret 
 25CA0D3F066CF12B21CBADEC6E6517751116398633http://www.example.com:8900/webct/homearea/homearea
(実際には一行)

実行すると以下のような値が帰ってきます。

A2C158368D959FF0F87B6835CE5EB483

これがAUTHパラメータになります。

最終的にオートサインオンでログインできるURLは以下の通りになります。(Time Stamp等の空白はURLエンコードするのが正しいURLとなる点に注意します)

http://www.example.com:8900/webct/public/autosignon?IMS%20id=25CA0D3F066CF12B21CBADEC6E651775&Time%20Stamp=1116398633&URL=http://www.example.com:8900/webct/homearea/homearea&AUTH=A2C158368D959FF0F87B6835CE5EB483

このURLにブラウザでアクセスするとログイン画面無しでmyWebCTにアクセスできます。ただし、タイムスタンプをパラメータに取っている点からわかるように、一定時間を経過するとURLが無効なものとして扱われるので恒久的に利用できるURLというわけではありません。

実装

ここまででオートサインオン機能の大半を解説しましたが、ローカルで全て処理してしまっている為、全く使い物になりません。実際にこの機能を外部アプリケーションに実装するには以下の手順で行う事になります。
これらは全て外部アプリケーション内で行わなくてはなりません。よって外部アプリケーション側で改造機能や計算機能などを備えていないと実装は難しくなってきます。

以下に手順を列挙します。

  1. ログインセッションのユーザ名等、「WebCT IDとなりえるもの」を取得する
  2. 「WebCT IDとなりえるもの」から「IMS ID」を取得する。これはHTTP経由でIMS Enterprise APIを実行し、さらに実行結果からIDを切り出すような仕組みを利用する必要がある。
  3. 「取得したIMS ID」、「現在のタイムスタンプ」、「飛び先URL」からMACを計算する
  4. 上記の手順で得る事の出来た値よりオートサインオンURLを生成し、リンクを表示させる。

実装済み製品

弊社ではこれらのオートサインオン機能を利用した製品をいくつか販売しております。詳細は info@emit-japn.com までお問い合わせください。

Xoops-WebCT Connector
Xoopsプラグインとして提供されます。Xoops内にmyWebCTの情報を表示させる事が出来ます。
CASリダイレクタ
Yale Central Authentication Service (CAS)に認証を委ねる事により他システムとのシームレスな連携を実現します。CASリダイレクタはWebCTのオートサインオン機能を利用してCASとWebCTを統合します。
文責: 福山貴幸
(2005年 5月)