概要
GoogleやFacebook、Yahoo! JAPANの提供するOAuth、OpenID Connectのシングルサインオン(SSO)を利用する上でトークン、ログイン状態の管理が必要になります。ログイン、ログアウトに加えアプリによってはマルチアカウント利用やアカウント切り替えを必要とするケースもあります。スマフォアプリではネイティブ、WebViewでSSOの認証方法が異なり、実装パターンは多岐にわたります。これまでID連携の設計や実装サポートしてきたナレッジをもとに、AndroidアプリにおけるSSOからログイン状態の管理まで、アプリの要件にあった実装方法をご紹介します。
自己紹介
@kura_lab
OpenID Foundation Japan
ID厨
ネィティブアプリではセッション管理が大変
ID連携実装パターン
異なる組織間でユーザーのiDデータを連携し、サービスの向上をめざすもの
OpenID Connect
知っておきたい7つのID連携パターン
http://techblog.yahoo.co.jp/web/auth/id_federation_impl_patterns/
WebApp スタンダードなパターン
WebApp server Request-> Server (Redirect処理)
- Request
- 認証
- ID Token
- Login処理
Native スタンダードなパターン
Native Browser
- Request
- 認証
- ID Token
- Login処理、AppにToken保存
Native, WebView Hybrid
Native, Browser(Yahoo)
- Request
- 認証
- <- ID Token (Custom URI)
- Login処理 Token 保存
- Server Login 処理Webiew経由で Cookie発行、サーバーにトークンを保存
OpenID Connect Tokenの種類
- Access Token
- Referesh Token
- ID Token
ふたつのトークンの物語
http://blog.openid.or.jp/post/12874061176/openid-connect-tale-of-two-tokens
-> Token, Cookieによるセッション管理が大変
ログインサイクルで大事なこと
ログイン時には
- Cookie有効
- AccessToken有効
- RefereshToken有効
- IDToken 有効
ログアウト時, Cookie 有効期限切れは
- Cookie無効
- AccessToken有効? 無効?
- RefereshToken有効 無効?
- IDToken 有効?
Token有効期限切れは
- Cookie無効?
- AccessToken 無効
- RefereshToken 無効
- IDToken 有効?
ID Tokenとは?
詳しくは
http://www.slideshare.net/kura_lab/devsumi201413c5
FaceBookが、Slideshareのために、kuraを認証したかを示すToken
発行時に検証して、IDTokenは保持しなくてもよい
ID Tokenの内容
iss:(issure)
sub:
aud: (audience)
exp: (有効期限)
IDTokenの有効期限は、IDPがきめるもの。
WebViewに発行するCookieの有効期限はアプリのポリシーで決めてよい
TokenはCookieの有効無効にあわせるとよいよ!
Cookie -> 無効,AccessToken, RefereshToken無効化
BackendをAPI を Callしたい場合は無効にしなくてもよい
ID Tokenは保持しなくてよい
Tokenの有効期限切れは、再発行。
アカウント切り替え時は?
アカウント無効化すると再発行が大変なためバックエンドで保持するのがよいだろう
- Cookie 別アカウント発行
- AccessToken 保持
- RefereshToken 持無
- IDToken 保持しない。
Androidはブラウザー経由でOpenID Connect
WebViewではなく、ブラウザーを推奨する理由
IDpのログインセッションを共有できる!
認証サービスを使用しているAppなら、共有できる
SSL通信、ドメインを見てフィッシングか確認できる
WebViewの場合、SSL ドメインを確認できない
iOS App で やろうとすると
UX を理由にAppStoreの審査でリジェクトされることもある!