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

| コメント(0) | トラックバック(0)

複数のウェブアプリを作って、それぞれ[.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にログインした人に、何が見えてもよいか、などユーザごとに制限ができますので、そちらで対応することにしております。


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

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


 

トラックバック(0)

トラックバックURL: http://qualia.gcblog.net/mtcs/mt-tb.cgi/140

コメントする

Amazon Shopping

Amazonでお買い物は
こちらから。
Amazonでお買い物

このブログ記事について

このページは、ownerが2008年8月12日 15:08に書いたブログ記事です。

ひとつ前のブログ記事は「MTのCAPTCHA」です。

次のブログ記事は「xoops cube 本名のデフォルト表示」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。