58.1K Views
January 27, 20
スライド概要
Yahoo! JAPANでのネイティブアプリに関する取り組みと、それに関する「OpenID Connect Native SSO for Mobile Apps」に関して説明します。
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
OpenID Connectとネイティブ アプリを取り巻く仕様と動向 ~Yahoo! JAPANの取り組み~ 2020年1⽉24⽇ ヤフー株式会社 都筑⼀希 OpenID Summit Tokyo 2020 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved.
M ⾃⼰紹介 名前 都筑⼀希(@kazuki229_dev) aK 09 12 所属 ヤフー株式会社(2016新卒⼊社) I ! O D@Y_ P ( ( P サービス統括本部 ID・PIM本部 担当業務 0 66 ( S サーバーサイド開発・運⽤ Yahoo! ID連携 ) iOSクライアントSDK開発・運⽤ 2 . )2)0 Corporation. 2 ) . 0 All Rights . Copyright (C) 2020 () Yahoo Japan Reserved. 2
アジェンダ • Yahoo! JAPANの取り組みと ネイティブアプリの関連仕様 • Yahoo! JAPANのSSOに関する取り組み • OpenID Connect Native SSO for Mobile Apps Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 3
アジェンダ • Yahoo! JAPANの取り組みと ネイティブアプリの関連仕様 • Yahoo! JAPANのSSOに関する取り組み • OpenID Connect Native SSO for Mobile Apps Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 4
Yahoo! JAPANのログインの略歴 2014 2008 2000 ログイン Smart Phone版対応 1998 1996 ログイン タブレット版対応 ログイン Feature Phone対応 Yahoo! JAPAN ID誕⽣ Yahoo! JAPAN誕⽣ Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 5
Yahoo! JAPANのログインの略歴 2014 Web 2008 2000 ログイン Smart Phone版対応 1998 1996 ログイン タブレット版対応 ログイン Feature Phone対応 Yahoo! JAPAN ID誕⽣ App Yahoo! JAPAN誕⽣ Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 6
Yahoo! JAPANのログインの略歴 アクティブID数 2000 2014 2008 2,554万 2,889万 5,049万 ログイン タブレット版対応 ログイン Smart Phone版対応 1998 1996 2019 ログイン Feature Phone対応 Yahoo! JAPAN ID誕⽣ Yahoo! JAPAN誕⽣ Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 7
Yahoo! JAPAN IDの施策と歴史 08 0 2 セキュリティ強化 プライバシー強化 14 0 2 ワンタイム パスワード 16 0 2 ログインテーマ スマフォ版 ログイン 18 0 2 ID連携 HTTPS化 シークレットID ログイン履歴 20 0 2 PKCE FIDO パスワードレス スマートログイン 1タップ・0タップ ログイン SSO Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 12 0 2 ログインアラート ログインロック ログインユーザー ID数拡⼤ ID連携数拡⼤ 10 0 2 OpenID 2.0 BBAuth Yahoo! ID連携 (OpenID Connect) OAuth 1.0 8
ネイティブアプリに関連する標準仕様 14 0 2 15 0 2 16 0 2 OpenID Connect Native Application Token Agent Core Token Agent API Bindings OpenID Connect Core PKCE Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 17 0 2 18 0 2 19 0 2 20 0 2 OpenID Connect Native SSO for Mobile Apps OAuth 2.0 for Native Apps OpenID Connect Client Initiated Backchannel Authentication Flow 9
ネイティブアプリに関連する標準仕様 14 0 2 15 0 2 16 0 2 OpenID Connect Native Application Token Agent Core Token Agent API Bindings OpenID Connect Core PKCE Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 17 0 2 18 0 2 19 0 2 20 0 2 OpenID Connect Native SSO for Mobile Apps OAuth 2.0 for Native Apps OpenID Connect Client Initiated Backchannel Authentication Flow 10
アジェンダ • Yahoo! JAPANの取り組みと ネイティブアプリの関連仕様 • Yahoo! JAPANのSSOに関する取り組み • OpenID Connect Native SSO for Mobile Apps Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 11
SSOとは︖ シングルサインオン(Single Sign-On︓SSO) 認証が必要な複数のアプリケーションやサービスを 利⽤する際、 ⼀度ログインするだけでそれぞれが使⽤可能になる仕組み 引⽤: https://www.atmarkit.co.jp/ait/articles/0401/01/news124.html Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 12
SSOを導⼊していない場合 ID: user1 Pass:●●● Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID: user2 Pass:●●● ID: user3 Pass:●●● 13
SSOを導⼊していない場合 各サービスごとにクレデンシャルを設定 ID: user1 Pass:●●● Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID: user2 Pass:●●● ID: user3 Pass:●●● 14
SSOを導⼊していない場合 パスワード忘れ ID: user1 Pass:????? Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID: user2 Pass:????? ID: user3 Pass:????? 15
SSOを導⼊していない場合 パスワード使いまわし ID: user1 Pass:12345 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID: user2 Pass:12345 ID: user3 Pass:12345 16
OpenID ConnectによるSSOの仕組み IdP ID: user Pass:●●● ID Token Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token ID Token 17
OpenID ConnectによるSSOの仕組み IdPに登録した IDとパスワードで認証 IdP ID: user Pass:●●● ID Token Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token ID Token 18
OpenID ConnectによるSSOの仕組み IdPはID Tokenを各RPに提供 IdP ID: user Pass:●●● ID Token Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token ID Token 19
OpenID ConnectによるSSOの利点 ユーザーが管理する クレデンシャルは1つ IdP ID: user Pass:●●● ID Token Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token ID Token 20
OpenID ConnectによるSSOの利点 同⼀ブラウザ IdP ID: user Pass:●●● ID Token Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token ID Token 21
OpenID ConnectによるSSOの利点 同⼀ブラウザ IdPのログインセッションが あれば認証をスキップも可能 IdP ID: user Pass:●●● ID Token Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token ID Token 22
まとめ • SSOとは︖ • OpenID ConnectでSSO • ユーザーはIdPのIDのみ管理 • ブラウザにIdPのログインセッションが あればログインアクションをスキップ Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 23
ネイティブアプリのSSO スマートフォン ID: user Pass:●●● IdP システムブラウザ ID Token App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token App2 ID Token App3 24
ネイティブアプリのSSO スマートフォン ID: user Pass:●●● IdPのログインセッションが あれば認証をスキップも可能 IdP システムブラウザ ID Token App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token App2 ID Token App3 25
ネイティブアプリのSSO スマートフォン ID: user Pass:●●● IdP システムブラウザ プライベートブラウジング ID Token ID Token ID Token 3rd システムブラウザ以外 IdPのログインセッションが App2 App1 App3 利⽤できないことも Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 26
ネイティブアプリのSSO スマートフォン ログインセッション App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 27
ネイティブアプリのSSO スマートフォン App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 28
ネイティブアプリのSSO スマートフォン 共有ストレージ App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 29
ネイティブアプリのSSO スマートフォン 共有ストレージ App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 30
ネイティブアプリのSSO スマートフォン 共有ストレージ App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 31
1タップ・0タップログイン 1タップログイン • 2013年に提供 • 1タップでログイン可能 0タップログイン • 2014年に提供 • アプリインストール後に 0タップでログイン可能 • ⾃然な流れで⾃動ログイン Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 32
1タップ・0タップログイン 1タップログイン • 2013年に提供 ⽉間431万回成功 • 1タップでログイン可能 0タップログイン • 2014年に提供 ⽉間909万回成功 • アプリインストール後に 0タップでログイン可能 • ⾃然な流れで⾃動ログイン ※2019/12に成功した数(UUではない) Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 33
ネイティブアプリのSSOまとめ • ネイティブアプリはシステムブラウザのセッションを 利⽤してログインスキップ • • 同じベンダーのアプリならログイン済みのアプリのセッション を使えそう • • ユーザーが普段プライベートブラウザや別のアプリを使うとできない ログインセッションを引き継ぐために共有ストレージを利⽤ Yahoo! JAPANでは1タップ・0タップログインとして提供 • ⽉間成功数 431万・909万 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 34
アジェンダ • Yahoo! JAPANの取り組みと ネイティブアプリの関連仕様 • Yahoo! JAPANのSSOに関する取り組み • OpenID Connect Native SSO for Mobile Apps Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 35
OpenID Connect Native SSO for Mobile Apps 最新版は2019年7⽉に更新 同⼀ベンダーが提供するアプリ間でログイン セッションを共有するための拡張仕様 基本概念は1タップ・0タップログインと同じ https://openid.net/specs/openid-connect-native-sso-1_0.html Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 36
全体の流れ Copyright (C) 2020 2018 Yahoo Japan Corporation. All Rights Reserved.
アプリ App1 共有 ストレージ アプリ IdP ブラウザ App2 AuthZ Req AuthZ Req AuthZ Req Token Req AuthZ Res Token Res Token Exchange Req Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 38
アプリ 共有 ストレージ App1 アプリ IdP ブラウザ App2 AuthZ Req AuthZ Req AuthZ Req Token Req AuthZ Res Token Res データを保存 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. アプリ1の通常ログイン Token Exchange Req Token Exchange Res 39
アプリ 共有 ストレージ アプリ IdP ブラウザ App2 App1 AuthZ Req AuthZ Req AuthZ Req Token Req データを取得 AuthZ Res Token Res アプリ2のSSO Token Exchange Req Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 40
アプリ間で共有するデータ スマートフォン 共有ストレージ device_secret App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token App2 App3 41
アプリ間で共有するデータ スマートフォン 共有ストレージ device_secret デバイスインスタンスを⼀意に識別 デバイスのクレデンシャル App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ID Token App2 App3 42
アプリ間で共有するデータ スマートフォン 共有ストレージ device_secret ID Token デバイス上で取得したID Token App2 App1セッションを発⾏する際に必要なユーザー情報 App3 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 43
アプリ間で共有するデータ スマートフォン 共有ストレージ device_secret ID Token 同⼀のデバイス上で認証された ログインセッションのみを共有可能 デバイス上で取得したID Token App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 セッションを発⾏する際に必要なユーザー情報 44
共有ストレージによるアクセス制御 スマートフォン ベンダー1 ベンダー2 共有ストレージ ı App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 App4 45
共有ストレージによるアクセス制御 スマートフォン ベンダー1 ベンダー2 共有ストレージ 同⼀のデバイス上で同⼀のベンダーアプリによって ı 認証されたログインセッションのみを共有可能 App1 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. App2 App3 App4 46
アプリ App1 共有 ストレージ アプリ IdP ブラウザ App2 AuthZ Req AuthZ Req AuthZ Req Token Req AuthZ Res Token Res Token Exchange Req Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 47
Device Secret要求 IdP ブラウザ アプリ App1 AuthZ Req AuthZ Req AuthZ Res AuthZ Res Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 48
Device Secret要求 IdP ブラウザ アプリ App1 AuthZ Req AuthZ Req AuthZ Res AuthZ Res Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 49
Device Secret要求 IdP ブラウザ アプリ App1 AuthZ Req AuthZ Req AuthZ Res scope=device_sso AuthZ Res device_secretを要求 Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 50
Device Secret要求 ブラウザ アプリ IdP App1 access_token AuthZ Req AuthZ Req token_type refresh_token AuthZ Res expires_in AuthZ Res id_token device_token Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 51
Device Secret要求 ブラウザ アプリ IdP App1 access_token AuthZ Req AuthZ Req token_type refresh_token AuthZ Res expires_in AuthZ Res id_token device_token Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 52
Device Secret要求 アプリ ブラウザ IdP App1 ds_hash→device_tokenをバインド access_token AuthZ Req AuthZ Req token_type sid→Session IDを紐付け refresh_token AuthZ Res expires_in AuthZ Res id_token device_token Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 53
Device Secret要求 ブラウザ アプリ IdP App1 access_token AuthZ Req AuthZ Req token_type refresh_token AuthZ Res expires_in AuthZ Res id_token device_token Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 54
Device Secret要求 ブラウザ アプリ IdP App1 access_token AuthZ Req AuthZ Req token_type 共有ストレージに保存 refresh_token AuthZ Res expires_in AuthZ Res id_token device_token Token Req Token Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 55
アプリ App1 共有 ストレージ アプリ IdP ブラウザ App2 AuthZ Req AuthZ Req AuthZ Req Token Req AuthZ Res Token Res Token Exchange Req Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 56
Token ExchangeによるSSO IdP アプリ App2 Token Exchange Req 検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 57
Token ExchangeによるSSO IdP アプリ App2 Token Exchange Req 検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 58
Token ExchangeによるSSO IdP アプリ App2 grant_type audience Token Exchange Req subject_token subject_token_type actor_token Token Exchange Res actor_token_type Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 59
Token ExchangeによるSSO アプリ IdP App2 grant_type audience Token Exchange Req subject_token urn:ietf:params:oauth:grant-type:token subject_token_type Token Exchange Reqだということを⽰す actor_token Token Exchange Res actor_token_type Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 60
Token ExchangeによるSSO IdP アプリ App2 grant_type audience Token Exchange Req subject_token 送信するID Tokenのissuer subject_token_type actor_token Token Exchange Res actor_token_type Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 61
Token ExchangeによるSSO アプリ IdP App2 grant_type audience Token Exchange Req subject_token subject_token_type actor_token 共有ストレージから取得したID Token Token Exchange Res actor_token_type Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 62
Token ExchangeによるSSO アプリ IdP App2 grant_type audience Token Exchange Req subject_token subject_token_type actor_token Token Exchange Res urn:ietf:params:oauth:token-type:id_token actor_token_type 検証 subject_tokenがID Tokenであることを⽰す Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 63
Token ExchangeによるSSO IdP アプリ App2 grant_type audience Token Exchange Req subject_token device_secret subject_token_type actor_token Token Exchange Res actor_token_type Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 64
Token ExchangeによるSSO アプリ IdP App2 grant_type audience Token Exchange Req urn:x-oath:params:oauth:token-type:device-secret subject_token actor_tokenがdevice_secretであることを⽰す subject_token_type 検証 actor_token Token Exchange Res actor_token_type Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 65
IdPのリクエスト検証 IdP アプリ App2 Token Exchange Req 検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 66
IdPのリクエスト検証 IdP アプリ App2 • • • • 検証内容 device_secretの検証 Token Exchange Req ID Tokenとdevice_secretのバインディング ID Tokenのsidのセッションの検証 クライアントがSSOを⾏なって良いか検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 67
IdPのリクエスト検証 IdP アプリ App2 検証内容 • device_secretの検証 Token Exchange Req • ID Tokenとdevice_secretのバインディング デバイスインスタンスを特定し存在を確認 • ID Tokenのsidのセッションの検証 • クライアントがSSOを⾏なって良いか検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 68
IdPのリクエスト検証 IdP アプリ App2 検証内容 • device_secretの検証 Token Exchange Req • ID Tokenとdevice_secretのバインディング 検証 • ID Tokenのsidのセッションの検証 Tokenがdevice_secretで特定される端末上で •IDクライアントがSSOを⾏なって良いか検証 Token Exchange Res 取得されたことを確認 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 69
IdPのリクエスト検証 IdP アプリ App2 • • • • 検証内容 device_secretの検証 Token Exchange Req ID Tokenとdevice_secretのバインディング ID Tokenのsidのセッションの検証 クライアントがSSOを⾏なって良いか検証 Token Exchange Res ID Tokenを発⾏した際に認証を⾏なった ログインセッションが有効であることを確認 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 70
IdPのリクエスト検証 IdP アプリ App2 • • • • 検証内容 device_secretの検証 Token Exchange Req ID Tokenとdevice_secretのバインディング ID Tokenのsidのセッションの検証 クライアントがSSOを⾏なって良いか検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 71
Token Exchange Response IdP アプリ App2 Token Exchange Req 検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 72
Token Exchange Response IdP アプリ App2 access_token issued_token_type token_type Token Exchange Req expires_in refresh_token id_token 検証 Token Exchange Res Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 73
Token Exchange Response IdP アプリ App2 access_token issued_token_type token_type Token Exchange Req expires_in refresh_token id_token 検証 Token Exchange Res App2が利⽤するためのトークン Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 74
Token Exchange Response IdP アプリ App2 access_token issued_token_type token_type Token Exchange Req expires_in refresh_token id_token リクエストのID Tokenのsidと同⼀セッション Token Exchange Res セッションが無効になればrefresh_tokenも 無効にならなければならない Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 検証 75
OpenID Connect Native SSO for Mobile Apps まとめ • device_secretとID Tokenを同じ ベンダー間共有してSSO • scope=device_ssoを指定して device_secretを要求し保存 • Token Exchangeを⽤いてアプリ⽤の トークンを要求 Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 76
全体のまとめ • Yahoo! JAPANの取り組みと ネイティブアプリの関連仕様 • Yahoo! JAPANのSSOに関する取り組み • OpenID Connect Native SSO for Mobile Apps Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. 77