ホームページ  >  記事  >  バックエンド開発  >  PHPでシングルユーザーアプリログインを行う方法

PHPでシングルユーザーアプリログインを行う方法

WBOY
WBOYオリジナル
2016-07-06 13:53:001940ブラウズ

現在の要件は、QQ などのコミュニケーション ツールに使用されるアプリでは、以前にログインした場合はブロックされています。これを実装する方法がわかりません。 ?

返信内容:

現在の要件は、QQ などのコミュニケーション ツールに使用されるアプリでは、以前にログインした場合はブロックされています。これを実装する方法がわかりません。 ?

アプリが配置されているデバイス情報を収集し、そのデバイス情報をユーザーにバインドします。1 人のユーザーが 1 つのデバイスでそのアプリを使用することが許可され、前のデバイスのユーザーはログイン時にキックオフされます。

過去 6 か月間、私たちはシングル サインオン システム (TnSSO) を設計し、実装してきました。これは非常に一般的なシステムですが、機能と経験について多くの詳細な調査を行いました。まとめと記録。以下では、SSO ともこのシステムを指します。

TnSSO は、PC 版とモバイル版で複数のログイン方法を提供します。ログインには通常のメール アカウントまたは携帯電話番号、Sina、QQ などのアカウントを使用した共同ログイン、および携帯電話の動的パスワード ログインがあります。また、プラットフォームごとに異なるログイン方法も用意されており、ユーザーエクスペリエンスを向上させるためにいくつかの特別なログイン方法が提供されています。たとえば、WeChat で会社の共有リンクを開くと、PC ページでは WeChat 認証を使用して直接ログインできます。ログインするためのQRコード。

現在のモバイル アプリ ページの多くは、通常のモバイル Web ページをアプリに直接埋め込んでいます。言うまでもなく、これには利点があります。アプリのネイティブ ページを介してログインするエクスペリエンスは、アプリで Web ページを開いてログインするよりも優れているため、アプリへのログインには引き続きネイティブ ページを使用します。 TnSSO はアプリのネイティブ ログイン方法と互換性があり、アプリ内のユーザーのログイン ステータスを識別できます。さらに、アプリを使用して QR コードをスキャンし、PC 版の SSO にログインすることもできます。

以下は、シングル サインオンのシーケンス図です。詳細については説明しません。これまでに使用したことのない人は、図を見れば何が起こっているかを理解できるはずです。

PHPでシングルユーザーアプリログインを行う方法

セキュリティとエクスペリエンス

TnSSO は、システムのセキュリティを確保することを前提として、セキュリティとエクスペリエンスに関して非常に詳細な考慮事項を備えており、ユーザー エクスペリエンスを最大限に最適化します。
1. クライアントとサーバー間の通信が盗聴されるのを防ぐために、プロセス全体が HTTPS です。
2. コールバック URL とホワイトリストを設定する。SSO にアクセスするには、まずクライアント サブシステムを SSO に登録する必要があります。
3. トークンは 1 回だけ有効で、クライアント サブシステムにバインドされ、使用後すぐに破棄されます。
4. ユーザー エクスペリエンスを向上させるため、ユーザーは IP ごとに 1 日あたり最初の 3 回のログイン、または携帯電話番号ごとに 1 日に初めて動的パスワードが送信されるときに確認コードを入力する必要がありません。
5. 確認コードは携帯電話の動的パスワードに 3 回以上送信されると無効になります。
6. 待ってください...

アプリログインに対応

アプリユーザーのログイン情報はアプリ内に別途保存され、SSOが提供するパブリックログインサービスは利用しません。では、ユーザーがアプリを通じて埋め込み Web ページにアクセスするとき、Web ページはどのようにしてユーザーのログイン ステータスを認識し、埋め込み Web ページとアプリのログイン ステータスをどのように共有できるのでしょうか?

私たちの解決策は、アプリがログインを必要とする埋め込みページ PageA にアクセスすると、PageA が SSO ログイン ページにジャンプします。このプロセスはすべてアプリ内で実行され、アプリが SSO ログイン ページにアクセスすると、ハッシュが追加されます。クッキーの値。 SSO はリクエストを受信すると、まず SSO 自体がログイン状態であるかどうかを判断し、ログイン状態でない場合は、Cookie 内のハッシュ値を使用してユーザー ID を取得した後、ユーザーを生成します。ログイン情報を取得し、トークンを持って WebA のコールバック URL が配置されているシステムにジャンプすると、WebA は上記のログイン プロセスを繰り返すことでログインできます。ハッシュ値が空の場合、またはハッシュ値を基にアプリサーバーから取得したユーザーIDが空の場合は、アプリが乗っ取ったURLにジャンプし、アプリのログイン完了後に上記の処理を繰り返します。

セキュリティ上の理由から、アプリはユーザー ID を直接設定するのではなく、Cookie にハッシュ値を設定します。SSO 独自のインターフェース調整を通じてアプリサーバーから取得したユーザー ID のみが正当性を保証し、信頼できます。

タイミング図は次のとおりです:

PHPでシングルユーザーアプリログインを行う方法

QR コードをスキャンしてログインする
QR コードをスキャンしてログインすることは、現在、携帯電話やその他のモバイル デバイスでログインしている場合に非常に一般的であり、これを使用して PC 版ログインのショートカットを提供することができます。ユーザーは、ユーザー自身が覚えていない可能性のある長くて複雑なパスワードを入力する必要がなく、シンプルで高速です。したがって、このログイン方法も、まだ正式にはリリースされていませんが、すでに計画され、設計されているものです。
具体的な実装方法は、まず SSO サーバーが競合しないコードをランダムに生成してデータベースに保存し、それを QR コード画像に描画して PC 版ログイン ページに表示します。ページは Javascript ショート ポーリングを使用してクエリを実行します。このコードのサーバーのログイン情報。アプリは、内蔵のコードスキャン機能を使用して画像内のコードを識別し、コードと上記のユーザーログイン情報のハッシュ値をパラメータとして使用して、アプリサーバーを介してSSOインターフェースをリクエストします。 SSO はリクエストを受信すると、まずデータベースにコードが存在するかどうかを判断し、存在する場合は正当なリクエストであることを示し、ハッシュ値を使用してユーザー ID を取得するようにアプリ サーバーに要求します。前述のアプリログインとの接続と同様です。 JS は、ユーザーがログインしていることをポーリングして確認し、ページを更新するか、元のページに戻ります。

PHPでシングルユーザーアプリログインを行う方法

最後に、TnSSO は、実際には統合ログイン サービスを提供するだけでなく、ユーザー登録、パスワード検索などの機能も統合しているため、パス システムと呼ぶのが適切であり、安定性とセキュリティの要件が最も高いシステムです。会社。

http://atlantisplus.net/articles/570.html

上の階で行われた多くのことを見ると、ログインに成功するとタイムスタンプが記録され、ログイン時にそのタイムスタンプに基づいて Cookie が解析され、タイムスタンプと比較されるようです。実際には、これはトークンを取得するだけであり、ログインに成功するたびにこのトークンを更新するだけです

1 つは、uid とデバイスをバインドする上記のようなもので、各操作で uid が現在のデバイスと一致するかどうかを検出します。
シングル サインイン関数とコールバック処理を提供する Huanxin などのサードパーティもあります。自分で長いリンクを作成する必要はありません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。