AccountManager と Self-Issued OP は共存するのか(しない)

経緯

前職の後輩より、AndroidでのAccountManagerの実装について問い合わせを受けました。詳細を確認したところ、「スマホアプリで認証連携を検討した際に、OpenIDのSelf-Issued OPを使いたいとの要件があるため、秘密鍵の管理をAccountManagerでやりたい」という趣旨でしたので、ちょっと調べてみました。

はて、

そもそも、「秘密鍵管理する」ということはどういうことか?これは OpenID の Self-Issued OP の仕組みに起因しています。Self-Issued OPについて誤解を恐れず非常にざっくり説明すると、「OpenID の管理をスマホ内に入れて、そこから他のアプリやブラウザからのログインなり何なりを認可連携させる仕組み」です。イメージとしては、OpenIDを管理するアプリを入れ、そこにログインだけしておけば、他のアプリやブラウザからのログインはOpenID経由と同じ仕組でアプリ内ですべてまとめてやってくれる、という仕組になります。GoogleとかYahooとかに頼らなくても、IDプロバイダからは独立してスマホ内でアカウントを管理するということです。

一方、AccountManagerは、Android内にアプリのID/Password/Tokenを比較的安全に保存し、他のアプリに認証サービスを提供するためのものです。

どっちも同じようなもの?それになんか便利そう?

いやいや、結局のところ、このSelf-Issued OPのアプリを解析されたら認証・認可の機能を乗っ取られかねません。保存すべき秘密鍵はどう管理するのか、root取られたらどうするのか、、、。
では、AccountManagerで秘密鍵などを管理させたら?というのがこの問い合わせに至った、という経緯なわけで。

そもそも求めている状態は何か?

Self-Issued OPアプリと、それを利用するRPのアプリが同一パブリッシャーの場合は、Self-Issued OPなんて面倒なことをやらないで、共通アカウントをAccoutMangaerに格納するほうが現実的じゃないかと。そこがパブリッシャーの場合はAccountManagerは使えないですが、だからといって Self Issued-OP を独自アプリに採用するのはちょっと、、、という感じですね。OSレベルでの実装であれば使い勝手も良くなるとは思いますが。
というわけで、OpenIDを使いたいという気持ちはわかるものの、今のSelf Issued-OPの仕組に乗っかるのはセキュリティ的に気になります。アプリが同一署名である必要がある、という制限がありますが、AccountManagerが近い形で実装はできるので、こちらからアプローチするのが適切かと思われます。

知識は陳腐化する

OpenIDを触っていたのが3年以上前なので、まったく見当違いなことを言っている可能性もありますが、ツッコミありましたらコメントでお願いします。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です