2013-02-16 11 views
5

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

+0

複数のアプリでSharedPreferenceを使用しますか? http://stackoverflow.com/questions/6030321/android-retrieving-shared-preferences-of-other-application – rafid059

答えて

0

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

ステートレス性を維持するためにJWTを使用しているとします。これは、認証サーバーが任意のアンドロイドアプリを通じてログインに成功するたびにJWTで応答することを意味します。

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

もっと効果的にするには、login、regd、およびパスワードを忘れた場合のライブラリモジュールを実装して、各アプリケーションに組み込むことができます。 3つのアクティビティのXMLファイルはlib自体にインクルードされ、アプリケーションはdrawableで見つからなければlibファイルからロードします。

OAuth2を使用してカスタム認証サーバーを実装することは1つの方法ですが、このようなサービスを提供するStormpathやCASなどのサードパーティソリューションがあります。あなたも自由であるものを見つけることができるかもしれません。

JWTではなく、userId(ユーザーデータベースのプライマリキー)を使用して、ユーザーがログインしているかどうかを識別できます。

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

ただし、トリッキーな部分がログアウトしてパスワードをリセットし、パスワードを変更します。 JWTが使用されている場合はログアウトプロセスについては言及していませんが、これには独自の課題がありますが、SSOを使用するとログアウトについて話しています。ユーザーがいずれかのアプリからログアウトした場合、残りのアプリからログアウトする必要があるかどうかを判断する必要があります。どちらも扱うことができますが、通常は簡単な実装のために単一のサインアウトとなり、良いUXも提供します。

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

あなたの質問はアンドロイドアプリのみに関連していますが、そのためにサーバーを実装し、アプリケーションごとにapplサーバーを変更する必要があります。これが完全にあなたの質問の本質ではない可能性がありますが、あなたの実際の要件は、私がこの実装を手助けするのを助けるかもしれません。

関連する問題