私は最近、慎重に選択されたさまざまなテクノロジーを使用して新しいプロジェクトを開始しました。私のプロジェクトは次のように構築されています。
アプローチは API-Centric です。つまり、.NET を使用して記述された API と通信する Web サイトと iOS アプリを構築していますSymfony2
。API の作成に成功し、完全に機能しています。API によって提供されるサービスにアクセスするために、主要なアクター (ウェブサイト ユーザー、iOS アプリ ユーザー、および開発者) は、いくつかの方法で自分自身を認証できます。
クライアントは、提供された資格情報を検証してセッションを設定するために、AJAX を介して API と直接通信している Web サイト インターフェイスを介して、ログイン/パスワードの組み合わせでアクセスできます。そのため、誰かが当社の Web サイトにログインすると、API にも自動的にアクセスできるようになります。
HTTP-Basic
開発者は、 overを使用して API を介して自分自身を認証できますSSL
。これにより、セッションが生成され、呼び出しが許可されているサービスにアクセスできるようになります。また、開発者とクライアントは、 Facebook Connect機能を介して Facebook アカウントを使用して Web サイトと API にアクセスできます。これにより、各アクターが当社の Web サイトでアカウントを作成する必要があるステップが削除されます。
したがって、基本的に、資格情報は機能を通じてHTTP-Basic
、またはFacebook Login
機能を使用して提供されます。
認証システムが機能し、クライアントが Web サイトにアクセスできるようになったので、ログイン時にリアルタイム サーバーに接続するようにします。リアルタイム サーバーが管理する場所が必要な場合は、Facebook や Google+ のようにチャットとプッシュ情報。
この場合、私はNode.js
強力なsocket.io
ライブラリを使用して、リアルタイム側を扱うすべてを管理しています。もちろん、ユーザーはセッションで Symfony セキュリティ システムに対して認証されますが、リアルタイム サーバーに対しては認証されないため、リアルタイム サービスはユーザーを認証するためにいくつかの資格情報を必要とします。
私が考えていた解決策はPdoSessionStorage
、API (Symfony 側) で を使用し、すべてのアクティブなセッションを MySQL や PostgreSQL などのデータベースに保存することです。そうすることで、symfony によって生成されたセッション ID をリアルタイム サーバーに送信し、提供されたセッション ID が正しいかどうかをデータベースで確認できます。彼がそうである場合、リアルタイム サーバーが提供するサービスにユーザーがアクセスできるようにし、ユーザーのセッションを ID に関連付けます。しかし、これが良い解決策であるかどうかは本当にわかりません。これについて、またこの問題に対処する方法について、経験豊富なアドバイスをお願いします。
注 : 何らかの理由でOAuth
、シングル サインオン アプローチを使用してこの問題を解決するソリューションになる可能性がある場合でも、実装できません。