両方のサーバーが同じ機関/ネットワークに存在することに言及しているので、プレーンHTTPの代わりにHTTPSを使用することを条件として、認証は機能します。あなたはDjangoがハッシュとしてPHPのハッシュが同じであることを確認することができない限り
D: Collect username and password, compute hash (using same algorithm as P)
、私はあなたが上でパスワードを送信することをお勧めします(ただし、プレーンHTTPを介して、ポイント2を参照)。あなたは2台のサーバーが直接接続されていることが確実であれば
Call web service (HTTP) on P, passing username and hash
あなただけのプレーンなHTTPを使用する必要があります。そうしないと、(ハッシュされた)パスワードをクリアに送信する典型的なWeb攻撃(例えばMan-in-the-middle)の影響を受けやすくなります。私は、PHPアプリケーション側では、ハッシュが同じであることを直接検証していると仮定しています。ネットワーク状態が不明な場合は、HTTPS経由でWebサービスを呼び出していることを確認してください。
P: Look up username, fail if it doesn't exist.
P: If it does, check stored hash against passed hash, fail if different.
P: If ok, return some other information about the user (eg, full name, some domain-specific stuff), otherwise return fail
D: If ok, create/update the user record
D: If ok, then log them in.
これらの手順は罰金ですが、2つのデータベース間で一定のユーザー同期を探しているなら、あなたはあなた自身のユーザデータベースを更新する方法を見つける必要があります。 PHPアプリケーションがユーザを無効/削除する場合、Djangoアプリケーションはその変更を受け取る必要があります。削除されたユーザがDjango側にログインすることを許可します。
この問題を解決するための2つの方法があります。
- 投票X分ごと/時間メッセージングシステム(例えばRabbitMQの)を使用し、ユーザのステータスが
- 同じであることを確認するためには、すべての変更ようにPHP側で公開され、Django側で受信されます。
最初の方法は、ユーザーが次回の投票前にDjango側でログインすることができるので、効率的で安全な方法ではありません。これは、セキュリティが重要ではなく、少数のユーザーしか存在しない場合に推奨されます。
2番目の方法は優れていますが、同期を管理するためのコードを書く必要があります(PHPとDjango)。この方法は、PHPアプリケーションのユーザーの変更を直ちに追跡して自分のデータベースに反映させることができるので、ずっと優れています。ユーザーがDjangoアプリケーションを使用していない場合、PHP側のユーザーの変更を無視できますあなたの側の記録)。
PHPアプリケーションと同じローカルネットワーク上にあるDjangoアプリケーションをホストしているサーバーは、またはインターネット経由で認証していますか? –
同じローカルネットワーク(同じ機関内で、とにかく)。 –