ああああ・・・・!!!!
■ゲロ吐きそうなほど苦しんだ。
えーとね、プログラミングの小ネタです。
シングルサインオンっぽいことをさせたいけど、認証サーバーみたいなの用意できないし、ログイン管理用のDBはバラバラだし、という現実に直面したとき、やけくそで実装したから、その方法を備忘録的に。
■前提条件。
というか、させたい動作。
- Aというサイトにログイン → B,C,Dにもログイン
- Bというサイトにログイン → A,C,Dにもログイン
以下、C,Dでも同様にする。
はい、どこかのサイトから入ったら、グループサイトにもログインするっていう。
SSO(シングルサインオン)ってやつですよね。
■実現にあたって。
ログイン情報なんだから、COOKIEで管理すればいいじゃん。
そうだね、ただ問題が。
COOKIEはドメインが違うと引き継げない、というか書き込めない。
どういうことかというと、ahoaho.comというサイトでログインして、bokeboke.jpのCOOKIEはセットできないということ。
これはセキュリティの問題と、オリジン云々の問題が絡んでくる。
オリジンについての説明は割愛、ググるか弁当でも食べてなさい。もぐもぐ。
■COOKIEをかきこめるようにしよう。
じゃあどうやって、クロスドメインでCOOKIEを書き込むようにしたかというと、javascriptをつかった。
なお、ログアウト時のことは考えてないもよう。
同一生成元ポリシー云々の問題を飛び越えるために、ちょっとした小細工をしまして・・・。
例えば、ahoaho.comからbokeboke.jpに書き込むとした場合。
1 bokeboke.jpに、bokeboke.jpへのCOOKIE書き込み用JSファイルを置きます。とりあえず、setcookie.jsとでもしておこうか。
2 ahoaho.comから、bokeboke.jpのsetcookie.jsを呼び出します。
3 ahoaho.comから、setcookie.jsのプログラムを実行します。
4 setcookie.jsから、bokeboke.jp/jslogin.phpにjqueryでパラメータを投げる。
5 jslogin.phpでパラメータからログイン情報を判別、setcookieする。
この回りくどい方法で、各サイトのcookieを書き込んで回ることができたよ。
もちろん、呼び出したjs内でcookieをセットしてもよかったんだけど、今回はログイン認証を各サイトでかける必要があったので、わざわざjs → PHPにパラメータを渡してます。
■注意したこととか。
1.外部JSなので実行順に注意。
外部JSの実行順ってランダムなんですって、奥様ご存知でした?
アタクシすっかり忘れてましたわ、ヲホホホ☆
なので、js実行を制御させたいなら、when().done()で制御してやるといいかも。
結局自分はこれ使わなかった。
なぜかというと、JSでPHPにパラメータ渡してcokkieセットの一連の流れを処理させた後に、location.href=””つって、ヘッダー書き換えてやったんだけど、cookie書き込み後にlocation書き換えると、セットしたcookieが消えたからさ・・・
とりあえず、metaタグでジャンプさせる方法だとなぜかうまくいくので*1現状はその方法で。
あとは、ブラウザ毎の検証だねぇ・・・。
まず、IE8,9はXMLHttprequestだっけか、それが使えなかったはず。
jquery使ってしまえば、その辺は吸収してくれるんだっけ・・・?いかん、つい最近の出来事だったのに、もううろ覚えだよ。
あとは、そうそう、safariだなぁ。
iPhone、PCに限らず、ログイン先のサイトにBASIC認証がかかっている場合、先に別タブでBASIC認証だけ解除してやる必要があるみたい。
開発とか検証用の環境ではBASIC認証をかけてるところも多いと思う。
js使ってPHPに値を渡すときにもBASIC認証がきくので、とりあえずjsの呼び出し、あるいはJSからphpをたたくときに、BASIC認証に引っかからないようにしておくことが大事、かな。
ちなみに、上記の方法でsafariでBASIC認証に引っかかっちゃうと、通信中のインジケーターがぐるぐる回りっぱなしになります。
以上、備忘録という割にすでに忘れてることも多いけど、記事更新終了。
適切に処理させないと、いろいろとセキュリティ的にやばそうなので、よいこはマネしないこと。
魔法陣グルグル フルサイズOP&ED集 - YouTube
JavaScript本格入門 ?モダンスタイルによる基礎からAjax・jQueryまで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2010/11/27
- メディア: 大型本
- 購入: 29人 クリック: 673回
- この商品を含むブログ (51件) を見る
- 作者: 沖林正紀
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/12
- メディア: 大型本
- この商品を含むブログ (3件) を見る
*1:その代り最低1秒は待たされるけど