7

4 ~ 5 個の Android アプリケーションがあり、これらすべてのアプリケーションにシングル サインオンを実装したいと考えています。そのため、ユーザーがそのアプリのいずれかにログインした場合、他のアプリケーションに再度ログインするよう求められることはありません。どうすればAndroidでそれを達成できますか??

4

1 に答える 1

0

SSO を実装するには、ユーザー資格情報を保持する共通データベースが必要です。これを行う 1 つの方法は、各アプリがアプリケーションへのログインに使用するログイン、登録、リセット、およびパスワードを忘れた場合の API を公開する独自の認証サーバーを実装することです。

JWT を使用してステートレスを維持しているとします。つまり、認証サーバーは、Android アプリを介したログインが成功するたびに JWT で応答します。

したがって、各アプリのランチャー アクティビティはログインではなく、ダッシュボードまたはログイン後にユーザーに表示されるものであるべきです。ダッシュボードの on_create で、共有設定で使用可能な既存の jwt があるかどうかを確認します。ある場合は、ダッシュボードに進みます。ただし、存在しない場合は、ログイン アクティビティに移動し、ユーザーに最初にログインさせます。ログインしたら、他のアプリが使用できるように jwt を共有設定に保存します。すべての共有設定が同じ名前空間を使用して jwt にアクセスしていることを確認する必要があります。

より効果的にするために、ログイン、regd、およびパスワードを忘れた場合のライブラリ モジュールを実装して、各アプリに含めることができます。すべてのアプリでその部分を準備できます。3 つのアクティビティの XML ファイルは lib 自体に含めることができ、アプリの drawables で見つからない場合、アプリは lib ファイルからそれらを読み込みます。

サーバー部分に来て、カスタム認証サーバーを実装します。たとえば、OAuth2 を使用するのが 1 つの方法ですが、簡単にするために、Stormpath や CAS などのサードパーティ ソリューションがそのようなサービスを提供します。無料のものも見つかるかもしれません。

JWT の代わりに、userId (ユーザー データベースの主キー) を使用して、ユーザーがログインしているかどうかを識別できます。

考慮すべきもう 1 つのポイントは、これらの各アプリのアプリケーション サーバーがある場合は、JWT または userId を使用してアプリの要求に応答し、その認証サーバー通信トークンに基づいて決定する必要があるかどうかです。言うまでもなく、そのアプリケーション サーバーと認証サーバーもそれらの間で通信して、アプリのユーザー情報を同期する必要があります。これは、ユーザー情報全体を保持する単一のデータベースと通信するサード パーティの認証サーバーを使用している場合でも同じですが、アプリケーション サーバーをサード パーティの認証サーバーと同期する作業が必要になる場合があります。

ただし、注意が必要なのは、ログアウトしてパスワードをリセットし、パスワードを変更することです。JWT を使用する場合のログアウト プロセスについては話していませんが、これには独自の課題がありますが、SSO を使用する場合のログアウトについて話しています。ユーザーがいずれかのアプリからログアウトした場合、ユーザーを残りのアプリからログアウトする必要があるかどうかを決定する必要があります。どちらも処理できますが、通常は実装を容易にするためにシングル サインアウトであり、優れた UX も提供します。

また、これらのアプリのいずれかに Web サイト バージョンがあり、ユーザーが Web サイトからパスワードを変更またはリセットした場合、変更後に最初にアプリを使用するときに、ユーザーがデバイスで再度ログインすることを確認する必要があります。ただし、このロジックは、認証サーバー内のサーバー側で完全に管理する必要があります。

あなたの質問はAndroidアプリのみに関連していますが、そのためにサーバーを実装し、アプリごとにapplサーバーも変更する必要があるかもしれません. これがあなたの質問の本質ではない可能性があるかもしれませんが、あなたの実際の要件は、これを実装するのに役立つかもしれません.

于 2016-11-21T11:05:33.853 に答える