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

Safari (ITP) & Chrome (SameSite=Lax as default) が Federation に与える影響 - OpenID TechNight vol.17

Safari (ITP) & Chrome (SameSite=Lax as default) が Federation に与える影響 - OpenID TechNight vol.17

Nov Matake

August 20, 2020
Tweet

More Decks by Nov Matake

Other Decks in Technology

Transcript

  1. S a f a r i ( I T P

    ) & C h r o m e ( S a m e S i t e = L a x a s d e f a u l t ) が F e d e r a t i o n に与える影響 N o v M a t a k e
  2. h t t p s : / / m a

    t a k e . j p
  3. F e d e r a t i o n

    P a t t e r n s
  4. h t t p s : / / o p

    e n i d - f o u n d a t i o n - j a p a n . g i t h u b . i o / 8 0 0 - 6 3 - 3 - f i n a l /
  5. O p e n I D C o n n

    e c t ではこちらが主流 S A M L ではこちらが主流
  6. S A M L ではこちらが主流 O p e n I

    D C o n n e c t ではこちらが主流
  7. U s e r R P I d P B

    r o w s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 認証レスポンス� w / A u t h o r i z a t i o n C o d e W e l c o m e B a c k ! I D T o k e n ( + A c c e s s T o k e n ) I D T o k e n 検証 A u t h o r i z a t i o n C o d e
  8. U s e r R P I d P B

    r o w s e r I d P 選択 認証リクエスト ログイン要求 I d P 選択 ログイン要求 e
  9. U s e r R P I d P B

    r o w s e r e
  10. U s e r R P I d P B

    r o w s e r I D & P a s s w o r d I D & P a s s w o r d e
  11. U s e r R P I d P B

    r o w s e r A u t h o r i z a t i o n C o d e = A s s e r t i o n R e f e r e n c e 認証レスポンス� w / A u t h o r i z a t i o n C o d e
  12. U s e r R P I d P B

    r o w s e r I D T o k e n ( + A c c e s s T o k e n ) A u t h o r i z a t i o n C o d e I D T o k e n = A s s e r t i o n 認証レスポンス� e
  13. U s e r R P I d P B

    r o w s e r W e l c o m e B a c k ! I D T o k e n 検証 W e l c o m e B a c k ! 認証レスポンス� e
  14. U s e r R P I d P B

    r o w s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 W e l c o m e B a c k ! I D T o k e n ( + A c c e s s T o k e n ) I D T o k e n 検証 A u t h o r i z a t i o n C o d e 認証リクエスト・認証レスポンスとも基本的には G E T 認証レスポンス� w / A u t h o r i z a t i o n C o d e
  15. O p e n I D C o n n

    e c t ではこちらが主流 S A M L ではこちらが主流
  16. U s e r R P I d P B

    r o w s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 認証レスポンス w / S A M L A s s e r t i o n W e l c o m e B a c k ! S A M L A s s e r t i o n 検証
  17. U s e r R P I d P B

    r o w s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 W e l c o m e B a c k ! S A M L A s s e r t i o n 検証 基本的には認証リクエストは G E T 、認証レスポンスは P O S T 認証レスポンス w / S A M L A s s e r t i o n
  18. U s e r R P I d P B

    r o w s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得
  19. I T P & S a m e S i

    t e = L a x 概要
  20. I n t e l l i g e n

    t T r a c k i n g P r e v e n t i o n ( I T P )
  21. h t t p s : / / w e

    b k i t . o r g / t r a c k i n g - p r e v e n t i o n /
  22. I T P 概要 ❖ C r o s s

    - s i t e T r a c k i n g 可能なドメインを自動検知して T r a c k e r 判定 ❖ 3 0 日間ユーザーインタラクションがなければ当該ドメインの全データ削除 ❖ 全ての� 3 r d - p a r t y C o o k i e が利用不可 ❖ S t o r a g e A c c e s s A P I により明示的許諾を得たコンテキストでのみ利用可能 
 ( = ユーザーインタラクション発生しないと 3 r d - p a r t y C o o k i e 利用不可 ) ❖ 7 日間ユーザーインタラクションがないドメインの J S - w r i t a b l e な全データ削除 ❖ C l i e n t - s i d e C o o k i e s , I n d e x e d D B , L o c a l S t o r a g e , S e r v i c e W o r k e r e t c .
  23. S a m e S i t e = L

    a x a s d e f a u l t
  24. h t t p s : / / w w

    w . c h r o m e s t a t u s . c o m / f e a t u r e / 5 0 8 8 1 4 7 3 4 6 0 3 0 5 9 2
  25. C o o k i e の S a m

    e S i t e 属性 ❖ S e t - C o o k i e 時に指定すると C r o s s - s i t e リクエストでの当該 C o o k i e 付与を制限可能 ❖ S a m e S i t e = N o n e : 制限なし # いままではこちらがデフォルト ❖ S a m e S i t e = L a x : 下記例外除き制限あり ❖ T o p L e v e l N a v i g a t i o n ❖ S a f e H T T P M e t h o d ( e . g . , G E T ) ❖ S a m e S i t e = S t r i c t : 制限あり
  26. S a m e S i t e = L

    a x a s d e f a u l t 概要 ❖ 以下のようなケースではデフォルトで C o o k i e が付与されない ❖ i f r a m e での C r o s s - s i t e リソース呼び出し ❖ P O S T での C r o s s - s i t e 遷移時 # 当面は S e t - C o o k i e から 2 分以内は付与 ❖ S a m e S i t e = N o n e を明示的に指定すれば上記制限は回避可能 ❖ 但し S e c u r e 属性必須
  27. I T P / S a m e S i

    t e = L a x a s D e f a u l t が F e d e r a t i o n に与える影響は?
  28. I d P < - > R P 間を G

    E T で遷移すると I d P が T r a c k e r 認定受ける可能性も
  29. U s e r R P I d P B

    r o w s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得 ❖ 複数の R P と連携する 
 ブラウザ上では T r a c k e r 認定
  30. R P U s e r B r o w

    s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得 ❖ 3 0 日間インタラクションがない と全データが消される I d P 【補足】 T r a c k e r 判定の有無に限らず ( = I d P / R P 共に ) 7 日間インタラクションがないと J S - w r i t a b l e なデータは全削除
  31. R P U s e r B r o w

    s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得 ❖ 3 0 日間インタラクションがない と全データが消される I d P I d P は 3 0 日間インタラクション無しだと強制ログアウト S P A な R P は 7 日間インタラクションがないと強制ログアウト
  32. I d P < - > R P 間を P

    O S T で遷移すると リクエストに C o o k i e が付与されない ※ 当面は S e t - C o o k i e から 2 分以内ならセーフ
  33. U s e r R P I d P B

    r o w s e r I d P ですでにログイン済であっても 毎回ログイン画面が出る。
  34. U s e r R P I d P B

    r o w s e r ❖ ログイン前の F O R M 入力値を復元できない。 ❖ C S R F 対策に引っかかる。
  35. I d P < - > R P 間で i

    f r a m e を介して コミュニケーションすると N G
  36. ❖ O p e n I D C o n

    n e c t ❖ p r o m p t = n o n e ❖ O I D C S e s s i o n M a n a g e m e n t ❖ O I D C F r o n t - c h a n n e l L o g o u t ❖ S A M L ❖ 仕様上は特になし ❖ I d P D a s h b o a r d ( アプリ一覧等 ) を社内ポータル内で i f r a m e 呼び 出しするようなケースはあり i f r a m e 利用シーン
  37. p r o m p t = n o n

    e w / h i d d e n i f r a m e U s e r R P I d P B r o w s e r p r o m p t = n o n e ログイン状態確認 ログイン状態 ログアウト状態 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得 r e l o a d e t c .
  38. p r o m p t = n o n

    e w / h i d d e n i f r a m e U s e r R P I d P B r o w s e r p r o m p t = n o n e ログイン状態確認 ログイン状態 ログアウト状態 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得 ❖ I d P ですでにログイン済で あってもログアウト状態 r e l o a d e t c .
  39. O I D C S e s s i o

    n M a n a g e m e n t h t t p s : / / r p . c o m / a n y R P i f r a m e I d P i f r a m e s e s s i o n _ s t a t e = x y z c h a n g e d / u n c h a n g e d l o o k u p c o o k i e / l o c a l S t o r a g e … a n d i f “ c h a n g e d ” , r u n A u t h Z r e q u e s t e t c .
  40. O I D C S e s s i o

    n M a n a g e m e n t h t t p s : / / r p . c o m / a n y R P i f r a m e I d P i f r a m e s e s s i o n _ s t a t e = x y z c h a n g e d / u n c h a n g e d l o o k u p c o o k i e / l o c a l S t o r a g e … a n d i f “ c h a n g e d ” , r u n A u t h Z r e q u e s t e t c . ❖ l o o k u p 失敗して常に “ c h a n g e d ” を返す
  41. 【某ケーブルテレビの会員サイト】 S e s s i o n M a

    n a g e m e n t �使って I d P S e s s i o n に変化あった際に R P 側で自動的にログアウトする 実装に… # �永遠にログインできない
  42. O I D C F r o n t -

    c h a n n e l L o g o u t R P 1 h t t p s : / / i d p . c o m / l o g g e d _ o u t … R P 2 R P 3 l o a d R P l o g o u t e n d p o i n t v i a i f r a m e … a k i n d o f “ S i n g l e S i g n - o u t ” s o l u t i o n .
  43. O I D C F r o n t -

    c h a n n e l L o g o u t R P 1 h t t p s : / / i d p . c o m / l o g g e d _ o u t … R P 2 R P 3 l o a d R P l o g o u t e n d p o i n t v i a i f r a m e … a k i n d o f “ S i n g l e S i g n - o u t ” s o l u t i o n . ❖ R P からログアウトされない
  44. ❖ I d P < - > R P 間を

    G E T で遷移すると I d P が T r a c k e r 認定受ける ❖ T r a c k e r であることに間違いはなく、解決策なし。 ❖ 現在解決策を用意しようと議論がされているので今後に期待? ❖ I d P < - > R P 間を P O S T で遷移するとリクエストに C o o k i e が付与されない ❖ S a m e S i t e = N o n e ; S e c u r e ❖ I d P < - > R P 間で i f r a m e を介してコミュニケーションすると N G ❖ C h r o m e : S a m e S i t e = N o n e ; S e c u r e ❖ S a f a r i : ユーザーインタラクションなしでは解決策はなし。今後に期待?
  45. I d P < - > R P 間を G

    E T で遷移すると I d P が T r a c k e r 認定受ける可能性も
  46. R P U s e r B r o w

    s e r I d P 選択 認証リクエスト ログイン要求 I D & P a s s w o r d I D & P a s s w o r d W e l c o m e B a c k ! I d P 選択 ログイン要求 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得 ❖ 3 0 日間インタラクションがない と全データが消される I d P I d P は 3 0 日間インタラクション無しだと強制ログアウト S P A な R P は 7 日間インタラクションがないと強制ログアウト
  47. ❖ I d P < - > R P 間を

    G E T で遷移すると I d P が T r a c k e r 認定受ける ❖ T r a c k e r であることに間違いはなく、解決策なし。 ❖ 現在解決策を用意しようと議論がされているので今後に期待? ❖ I d P < - > R P 間を P O S T で遷移するとリクエストに C o o k i e が付与されない ❖ S a m e S i t e = N o n e ; S e c u r e ❖ I d P < - > R P 間で i f r a m e を介してコミュニケーションすると N G ❖ C h r o m e : S a m e S i t e = N o n e ; S e c u r e ❖ S a f a r i : ユーザーインタラクションなしでは解決策はなし。今後に期待?
  48. I d P < - > R P 間を P

    O S T で遷移すると リクエストに C o o k i e が付与されない ※ 当面は S e t - C o o k i e から 2 分以内ならセーフ
  49. U s e r R P I d P B

    r o w s e r I d P ですでにログイン済であっても 毎回ログイン画面が出る。
  50. U s e r R P I d P B

    r o w s e r ❖ ログイン前の F O R M 入力値を復元できない。 ❖ C S R F 対策に引っかかる。
  51. ❖ I d P < - > R P 間を

    G E T で遷移すると I d P が T r a c k e r 認定受ける ❖ T r a c k e r であることに間違いはなく、解決策なし。 ❖ 現在解決策を用意しようと議論がされているので今後に期待? ❖ I d P < - > R P 間を P O S T で遷移するとリクエストに C o o k i e が付与されない ❖ S a m e S i t e = N o n e ; S e c u r e ❖ I d P < - > R P 間で i f r a m e を介してコミュニケーションすると N G ❖ C h r o m e : S a m e S i t e = N o n e ; S e c u r e ❖ S a f a r i : ユーザーインタラクションなしでは解決策はなし。今後に期待?
  52. I d P < - > R P 間で i

    f r a m e を介して コミュニケーションすると� N G
  53. p r o m p t = n o n

    e w / h i d d e n i f r a m e U s e r R P I d P B r o w s e r p r o m p t = n o n e ログイン状態確認 ログイン状態 ログアウト状態 W e l c o m e B a c k ! A s s e r t i o n 検証 認証レスポンス A s s e r t i o n 取得 ❖ I d P ですでにログイン済で あってもログアウト状態 r e l o a d e t c .
  54. O I D C S e s s i o

    n M a n a g e m e n t h t t p s : / / r p . c o m / a n y R P i f r a m e I d P i f r a m e s e s s i o n _ s t a t e = x y z c h a n g e d / u n c h a n g e d l o o k u p c o o k i e / l o c a l S t o r a g e … a n d i f “ c h a n g e d ” , r u n A u t h Z r e q u e s t e t c . ❖ l o o k u p 失敗して常に “ c h a n g e d ” を返す
  55. O I D C F r o n t -

    c h a n n e l L o g o u t R P 1 h t t p s : / / i d p . c o m / l o g g e d _ o u t … R P 2 R P 3 l o a d R P l o g o u t e n d p o i n t v i a i f r a m e … a k i n d o f “ S i n g l e S i g n - o u t ” s o l u t i o n . ❖ R P からログアウトされない
  56. ❖ I d P < - > R P 間を

    G E T で遷移すると I d P が T r a c k e r 認定受ける ❖ T r a c k e r であることに間違いはなく、解決策なし。 ❖ 現在解決策を用意しようと議論がされているので今後に期待? ❖ I d P < - > R P 間を P O S T で遷移するとリクエストに C o o k i e が付与されない ❖ S a m e S i t e = N o n e ; S e c u r e ❖ I d P < - > R P 間で i f r a m e を介してコミュニケーションすると N G ❖ C h r o m e : S a m e S i t e = N o n e ; S e c u r e ❖ S a f a r i : ユーザーインタラクションなしでは解決策はなし。今後に期待?
  57. ❖ I d P < - > R P 間を

    G E T で遷移すると I d P が T r a c k e r 認定受ける ❖ T r a c k e r であることに間違いはなく、解決策なし。 ❖ 現在解決策を用意しようと議論がされているので今後に期待? ❖ I d P < - > R P 間を P O S T で遷移するとリクエストに C o o k i e が付与されない ❖ S a m e S i t e = N o n e ; S e c u r e ❖ I d P < - > R P 間で i f r a m e を介してコミュニケーションすると N G ❖ C h r o m e : S a m e S i t e = N o n e ; S e c u r e ❖ S a f a r i : ユーザーインタラクションなしでは解決策はなし。今後に期待?