2008.08.12 (Tue) Category : Blog Author :

apacheのBasic認証を自動認証させる方法

複数のウェブアプリを作って、それぞれ[.htaccess]によるBasic認証をさせておりました。
これらのサイトをすべてまとめたポータルサイトを用意し、シングルサインオンを実現すべくいろいろと調べてみました。

たんなるリンク集を作ってしまうとポップアップでBasic認証画面が表示されてしまい、それぞれでusernameとpasswordを入力する必要があります。

IEの4くらいだと、リンクで「http://username:password@ドメイン名/」という記述が使えたのですが、現在はセキュリティ上禁止されました。

いろいろと調べたり試したりしてようやく見つけたのが「Ajax」を使った認証です。

Ajaxでは、XMLHttpRequest(またはActiveXObject(“Microsoft.XMLHTTP”))を使うことになりますが、これらのオブジェクトに対するメソッドでopenというものがあります。

 XMLHttpRequest.open( {‘POST’ or ‘GET’} ,URL [,非同期モード? [,Username [,Password]]] )

openの引数で4番目のUsernameと5番目のPasswordがあります。これらは、Basic認証におけるUsernameとPasswordになります。
これを利用し、Basic認証でサインインしたいウェブアプリへアクセスします。アクセス先は、一つ空のhtmlを用意すると良いでしょう。
(※また、該当するディレクトリへアクセスでもいいです)

リクエストした戻り値のResponseはとくに処理する必要がありません。

その後、ページ内でリンクにアクセスしても、Basic認証を済ましていますので、そのまま通過できます。

ただし、Openで指定できるURLは、同一ドメイン名でなければなりません。これは、セキュリティ上の制限となっており、他のドメインの場合は、
利用できませんが、応用することで、対応可能です。

ページ内にiframeで他のソースを参照します。その参照先がウェブアプリのある別ドメインとすればよいのです。そこで、ajaxで時ドメイン内を参照し、認証をパスしておきます。
これで問題ありません。

すべて、ブラウザが認証情報を持つことになるので、自分のブラウザ内で、どこに認証したのか、という情報は重要です。

別ドメインに認証の仕組みを作った場合は、ajaxですので、その中でUsernameとPasswordが読まれてしまいます。
ですので、phpなどで、呼び出し元のリファラを参照して、呼び出し元を特定しましょう。

また、最初の呼び出し部分ですが、
そのページ自体もセキュリティが必要ですが、その部分は、xoopsに任せました。

xoopsにログインした人に、何が見えてもよいか、などユーザごとに制限ができますので、そちらで対応することにしております。

ざっくり書きましたが、
もうすこし時間があれば、清書したいとおもいますが、とりあえず、ご容赦ください。

※質問があれば、コメントください。

 

コメントを残す

%d人のブロガーが「いいね」をつけました。