ユーザーが1つのIDとパスワードで認証を通したあと、直接DBアクセスができない別立てのWEBサーバー(複数のドメイン)を行き来できるサイトを構築しようとしています。

セキュアなサイトとするための一般的なやり方を知りたい、あるいは、うまいやり方を知りたいと考えています。
プログラム開発言語は、PHPかJAVAかで行おうとしていますが、ライブラリー的に利用できるものでも、サンプルや考え方のみでも構いませんので、教えてください。
参考になるWEBページや本でも構いません。
まずは、プログラムを組むというより、概念的な話のレベルでと考えています。

今考えているのは、サイトの規模は50万人程度の会員をかかえる予定です。あまり複雑怪奇なやり方でなく、同じ認証システムを使って、のちのちにサービス追加できる拡張性の高いシステムにしたいと考えています。(「はてな」のように・・・)

よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:2006/11/07 16:25:48
  • 終了:2006/11/11 23:37:43

ベストアンサー

id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/11/08 01:53:36

ポイント50pt

1と2は併用という形で回答しています。

クライアントからの情報送信が1で、サーバー側での検証方法が2いったイメージです。


SOAP の実装には Java であれば AXIS 等を使います。

http://www.h7.dion.ne.jp/~matsu/feature/axis/basic/intro.html

リモートのメソッドを呼べるので、ウェブサーバーが1の方法で受け取ったキーと会員IDを引数にしてメソッド呼び出し、認証サーバーが引数のキーが正しいものかDBと照合し結果を返す。という手順になるかと思います。


認証DBは分ける事もひとつの案ですが、複数のDBをまたいだトランザクションを実行できるDBMSは少ないので、アクセスパターンしだいではレプリケーションを検討した方が良いかもしれません。

一般にDBはスケールアウトしにくい部分なので、単により性能のいいサーバーを用意するのもありだと思います。

id:gooma

なるほど!正しく理解できていなかったようです。ようやく意図していたところがわかりました!(というような気がしています。)実践してみて、本当に理解ということになろうかと思います。

ありがとうございました。

※非常に夜遅くに回答、助かりました。大変参考になりました。プロフィールも見させていただきましたが、経験をヒシヒシと感じることができました。

2006/11/08 02:43:50

その他の回答(1件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/11/07 23:53:00

ポイント50pt

一般的かどうかは分かりませんが、自分ならこうするという方法です。


1.ログイン情報は言語で用意されているセッションは使わない。独自で実装。

Cookie に一意なキーを記録し、DBにも同じキーを記録する。その一致をもって認証済みを確認する。

Cookie のドメインを .hatena.ne.jp のようにホスト名を指定しない形にすると

q.hatena.ne.jp

d.hatena.ne.jp

r.hatena.ne.jp

等のようにサービスごとにドメインが分かれても共通で使える。


2.各ウェブサーバーと別に認証用のサーバーを用意し、認証情報の確認はすべてそちらに投げる事にする。

認証用のサーバーはDBに直接アクセス可能とする。

ウェブサーバー >-< 認証サーバー間の通信は SOAP,XMLRPC 等を使用すると楽。


という感じです。

id:gooma

なるほど!

よくわかりました。

.hatena.ne.jp とすることで、他のサービスごとにドメインが分かれていても、Cookie 情報はとれるんですね!

知っている方にとっては当たり前かもしれませんが、なかなか知ることができない情報なので助かりました。

2は、こちらでも考えていたのですが、もう少し具体的な実装方法がわかれば、なおありがたいです。

50万人くらいのサービスなので、1でやるにしても、2でやるにしても、負荷分散を考えて、サービス用のDBと認証用のDBは分けた方がいいのかなあと考えているところです。

2006/11/08 01:39:57
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/11/08 01:53:36ここでベストアンサー

ポイント50pt

1と2は併用という形で回答しています。

クライアントからの情報送信が1で、サーバー側での検証方法が2いったイメージです。


SOAP の実装には Java であれば AXIS 等を使います。

http://www.h7.dion.ne.jp/~matsu/feature/axis/basic/intro.html

リモートのメソッドを呼べるので、ウェブサーバーが1の方法で受け取ったキーと会員IDを引数にしてメソッド呼び出し、認証サーバーが引数のキーが正しいものかDBと照合し結果を返す。という手順になるかと思います。


認証DBは分ける事もひとつの案ですが、複数のDBをまたいだトランザクションを実行できるDBMSは少ないので、アクセスパターンしだいではレプリケーションを検討した方が良いかもしれません。

一般にDBはスケールアウトしにくい部分なので、単により性能のいいサーバーを用意するのもありだと思います。

id:gooma

なるほど!正しく理解できていなかったようです。ようやく意図していたところがわかりました!(というような気がしています。)実践してみて、本当に理解ということになろうかと思います。

ありがとうございました。

※非常に夜遅くに回答、助かりました。大変参考になりました。プロフィールも見させていただきましたが、経験をヒシヒシと感じることができました。

2006/11/08 02:43:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません