Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ソフトバンクにおけるID連携実装について

 ソフトバンクにおけるID連携実装について

2018/03/23 OpenID TechNight Vol.15での講演資料です

takayuki komatsu

March 30, 2018
Tweet

Other Decks in Technology

Transcript

  1. 4 自己紹介  小松 隆行 @komatak  ソフトバンク株式会社 2005 ~

    2018 現在  新卒入社、配属部署は所謂「情シス」。現在もその流れの部署に所属  OpenID Foundation Japan 所属会員 2008 ~ 2018 現在  現在はエンタープライズID(社員ID)活用のワーキンググループに所属  ソフトバンクモバイル事業 の ID連携/API認可基盤開発 2010 ~ 2018 現在  OpenID2.0, OAuth1.0a, OAuth2.0+OpenID Connect のIdPを実装  開発リーダー  通信キャリアのシステム担当といっても、単なるWeb系エンジニア OpenID Tech Night vol.15
  2. 8 ID連携/API認可基盤がない世界  ソフトバンクでは、  統一的な認証LV(どの認証でどの機能を利用させてよいか)の管理がしづらい → 社内で「サービス毎に必要な認証LV」を定義し、ID連携基盤でユーザの認証状態 を元に必要な(かつ、適切な)認証・認可を実施してRPに返却する基盤になっている 

    新しい認証技術が発明されても、導入が個々の実装になってしまう → 後ほど紹介する「回線認証」「指紋認証」、ほかにもSMSを利用した認証実装や、 セキュリティ観点でも強化ポイントをID連携基盤に集約してメリットを出している OpenID Tech Night vol.15
  3. 9 もう少し具体的に サービス毎に必要認証LVを定義 (社内LoA) ID連携基盤ではユーザ認証状態から必要な認証を実施 (所持認証) +回線認証 or OTP via

    SMS (記憶認証) +契約者暗証番号 レベル 2 レベル 3 該当サービス: ・A機能(クレデンシャルの変更など) ・B機能(契約書類の閲覧など) 該当サービス: ・C機能(個人情報の閲覧など) ・D機能(有料サービスの申込など) 該当サービス: ・MySoftBankサイトへのログイン ・契約済みサービス・アプリの利用 レベル 4 該当サービス:現状なし (所持認証) 回線認証 or OTP via SMS (記憶認証) +パスワード認証 (記憶認証) パスワード認証 or Y! ID連携の利用 レベル 1 (参考:NIST SP800-63-rev2) (rev3 ベースではない) OpenID Tech Night vol.15
  4. 11 E/U ブラウザ AuthZ Endpoint Token Endpoint RP 認可要求リクエスト 必要なLoAチェック

    LoA2を必要とするサービス利用 ユーザ同意処理 認可要求レスポンス (codeフロー) 認可コード確認 Access/Refresh/ IDトークン発行 ユーザ認証状態チェック OTP認証→成功 OTP入力画面表示 OTP入力 認証方式判定(LV1) PW入力画面表示 ID/PW入力 PW認証→成功 認証方式判定(LV2) SMSでOTP送信 認可画面表示 同意入力 サービス提供 OIDC Authtication Request もう少し技術的に OpenID Tech Night vol.15
  5. 12 E/U ブラウザ AuthZ Endpoint Token Endpoint RP 認可要求リクエスト 必要なLoAチェック

    LoA2を必要とするサービス利用 ユーザ同意処理 認可要求レスポンス (codeフロー) 認可コード確認 Access/Refresh/ IDトークン発行 ユーザ認証状態チェック OTP認証→成功 OTP入力画面表示 OTP入力 認証方式判定(LV1) PW入力画面表示 ID/PW入力 PW認証→成功 認証方式判定(LV2) SMSでOTP送信 認可画面表示 同意入力 サービス提供 OIDC Authtication Request もう少し技術的に RPからのAuthN Reqの要求パラメータや、 ユーザのセッション状況(Cookie等)を用いて、 consent(同意)までに必要な認証を実施 OpenID Tech Night vol.15
  6. 13 E/U ブラウザ AuthZ Endpoint Token Endpoint RP 認可要求リクエスト 必要なLoAチェック

    LoA2を必要とするサービス利用 ユーザ同意処理 認可要求レスポンス (codeフロー) 認可コード確認 Access/Refresh/ IDトークン発行 ユーザ認証状態チェック OTP認証→成功 OTP入力画面表示 OTP入力 認証方式判定(LV1) PW入力画面表示 ID/PW入力 PW認証→成功 認証方式判定(LV2) SMSでOTP送信 認可画面表示 同意入力 サービス提供 OIDC Authtication Request もう少し技術的に LoA1ではPW認証 LoA2ではOTP認証 via SMS を実施している例 OpenID Tech Night vol.15
  7. 14 ブラウザで実際に確認 ▼ LoA1 (データ量確認) https://my.softbank.jp/msb/d/webLink/doSend/MSB020043 https://id.my.softbank.jp/sbid_auth/type1/2.0/authorization.php? response_type=code& client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx& redirect_uri=https%3A%2F%2Fmy.softbank.jp%2Fmsb%2Fd%2Fauth%2FdoReceiveSbid&

    prompt=login%20consent& scope=openid& nonce=20180322144227678p0N21IdTRDAQVbv& ui_locales=ja& acr_value=1& amr=me ▼LoA2 (セキュリティ設定) https://my.softbank.jp/msb/d/webLink/doSend/CAS010011 https://id.my.softbank.jp/sbid_auth/type1/2.0/authorization.php? response_type=code& client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx& redirect_uri=https%3A%2F%2Fmy.softbank.jp%2Fmsb%2Fd%2Fauth%2FdoReceiveSbid& prompt=login%20consent& scope=openid& nonce=20180322144328203qrOt4YmPWkyUn1c& ui_locales=ja& acr_value=2& amr=me OpenID Tech Night vol.15
  8. 20 スマートログイン?  Yahoo!Japan IDとソフトバンク スマホ回線を紐付けるサービス  ソフトバンク回線でYahoo!サイトを開くと裏でSB側の回線認証  紐付けられたY!IDが通知され、Y!側が受け入れ自動ログインに

     連携済みのY!IDは自動的にY!プレミアム会員となるためお得  2015年10月サービス開始。現在なんとほぼ、1000万ユーザ! OpenID Tech Night vol.15
  9. 21 回線認証?  覚えていますか フューチャーフォンの 「かんたんログイン」  通信キャリアのゲートウェイがインターネットに出る際に、HTTPヘッダに付与する 端末固有IDをWebサイト側がユーザ識別子として受け入れていた実装 

    ここでいう 回線認証 ≠ かんたんログイン そのものではないですが、感覚的に はソフトバンクSIMが刺さっている端末からの通信を、キャリア網内サーバ(非イ ンターネット)に接続させることで取得できる情報から、通信元を一意に識別す る機能があると思っていただければ  これを OpenID Connectの「認証」としてつなげる OpenID Tech Night vol.15
  10. 22 E/U ブラウザ AuthZ Endpoint Token Endpoint Yahoo! Japan 認可要求リクエスト

    必要なLoAチェック Yahooにアクセス(この例はWeb) ユーザ同意処理(省略) 認可要求レスポンス (codeフロー) 認可コード確認 Access/Refresh/ IDトークン発行 ユーザ認証状態チェック 認証=回線認証実施可 紐づいているY!ID情報を 受け入れサービス提供 OIDC Authtication Request スマートログイン(設定済み)フロー キャリア網内 認証サーバ 接続端末 を特定 キャリア網内サーバに接続 バックチャネルで端末情報を受信 戻しリダイレクト ユーザとのインタラクションなしに スマホが携帯回線で通信している だけで自動的に認証が行われる OpenID Tech Night vol.15
  11. 27 指紋認証?  アレです、UAF的なアレ  端末側の検証結果(署名)をサーバ側で検証して、事前に紐付けている事業者側の IDとの紐付け確認をもって認証完了とする  これを OpenID

    Connectの「認証」としてつなげる  OIDCの「認証フェーズ」に入ったところでUAF的なシーケンスが始まる  UAF的なシーケンスが終わったところでOIDCの認証に戻すことになるが、何をもって UAFで認証された、と認可サーバ側が受け取るかが悩んだ末の実装になっている  OIDCシーケンスなので最初はWebなのに、UAF的な処理はアプリネイティブ、完了を 受けて再度WebのOIDCに戻すのが厄介でした OpenID Tech Night vol.15
  12. 28 Server App E/U ブラウザ webview AuthZ Endpoint Token Endpoint

    RP アプリ本体 マイソプラス 指紋認証フロー(登録) UAF的な クライアント UAF的な Endpoint 認可要求リクエスト ID/PW入力 UAF.inirire.Reg(AccessToken) 生体情報登録 PW入力画面表示 PW認証→成功 認可レスポンス(AccessToken) OIDC Authtication Request 登録依頼 Registration URL Req UAF.Registration.Request 指紋グリグリ ローカル指紋認証OK UAF.Regsitation.Response Registration.Result 登録完了 Done 登録前に、いわゆる 「レガシー認証」を実施 AccessToken発行 Tokenに紐づくIDと 紐付け OpenID Tech Night vol.15
  13. 29 マイソプラス 指紋認証フロー(認証) 認可要求リクエスト 指紋認証開始レスポンス 指紋認証開始 Initiate Authreq ローカルで検証 (OSのAPI経由)

    指紋認証 UAF.Auth.Request UAF.Auth.Response 署名検証 紐づくID を確認 Auth result OIDC復帰処理 ユーザ同意処理 同意入力 OIDC Authtication Request Server App E/U ブラウザ webview AuthZ Endpoint Token Endpoint RP アプリ本体 UAF的な クライアント UAF的な Endpoint 本アプリではここでいきなり WebViewが立ち上がる (ここでAuth Resultの引き 継ぎを実施している) ベアラ判定 OpenID Tech Night vol.15