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

認証認可の情報の追い方みたいな(2020/01/10 FFTT#381)

Yoko TAMADA
January 10, 2020
1.9k

認証認可の情報の追い方みたいな(2020/01/10 FFTT#381)

社内勉強会での発表資料です。

Yoko TAMADA

January 10, 2020
Tweet

Transcript

  1. 実体 Entity と 属性 Identity 人間の Taro さんは「実体」である。 システムは直接「実体」を認識することはできない。 Taro

    さんの ID や個人情報などのリソースは「属性」である。 システムは「属性」をもとにして実体を認識する。 いつものやつ
  2. 認証 Authentication (Authn) システムが「本物の Taro さん」を間違いなく「Taro さん」と認識する • Taro さんを一意に特定できる属性(だいたい

    identifier) • identifier の利用者として信頼するための情報(password, 生体情報, etc.) いつものやつ
  3. OAuth 2.0 認可(Authorization)のフレームワーク。 じつは、セキュリティの問題や、新しいアーキテクチャに対応するために仕様が追加され たり上書きされたりしている。 追加・上書きとは、最初の RFC 6749 が "更新されている"

    という意味ではなく、新しい RFC 番号が追加されているという意味で。 すべての仕様を把握するのは結構苦行だが、自分が利用するパターンを正しく認識して それに該当する仕様は把握しておくべき。 いつものやつ
  4. • これは認証の話?認可の話? • ユーザと認可サーバの間での話? • 認可サーバと認可クライアントの間での話? • それとも認可クライアントとユーザの間の話? • Web

    サーバ間(秘匿された経路内)の話? • Web サーバとユーザーエージェントの間の話? ◦ ユーザーエージェント:ブラウザ( JS)やネイティブアプリなど • 必要とされるセキュリティレベルは?決済系だったりする? こんな観点で分けて考えるぞ
  5. • これは認証の話?認可の話? • ユーザと認可サーバの間での話? • 認可サーバと認可クライアントの間での話? • それとも認可クライアントとユーザの間の話? • Web

    サーバ間(秘匿された経路内)の話? • Web サーバとユーザーエージェントの間の話? ◦ ユーザーエージェント:ブラウザ( JS)やネイティブアプリなど • 必要とされるセキュリティレベルは?決済系だったりする? こんな観点で分けて考えるぞ 登場人物が 多い!!! (#`Д')
  6. ユーザか認可サーバか認可クライアントか • いったい誰が対応すべき話なのか • FIDO に関わるのはユーザと認証サーバ(認可サーバ) ◦ 先に言ったとおりこれは認証に関する話 ◦ "認可"

    クライアントには一切関係しない • PKCE に関わるのは認可サーバと認可クライアント ◦ PKCE for OAuth 2.0 で、認可のフレームワークに関連する ◦ OAuth 2.0 のなかでも特定のフローに関して「コード横取り攻撃」を防ぐための仕様 ◦ コード横取りは、認可サーバと認可クライアントの間の話
  7. • 認可フレームワークに登場する概念として「秘匿されたクライアント」と「公開された クライアント」というものがある ◦ Web サーバであれば Client Secret を秘匿に保てる ◦

    ブラウザやネイティブアプリは Client Secret を秘匿に保てない。JS コード内やネイティブアプリコード 内に Secret を保持してはいけない • この違いによって取りうる行動が異なる ◦ 何ができて、何ができないか。何をすべきで、何をしてはいけないか ◦ 想定される問題※とその対策 ▪ ここは私もぜんぜん認識が追いついてない感じ。セキュリティってムズい(小並感) Webサーバかブラウザかネイティブアプリか
  8. • 焦らずひとつひとつ当てはめていく ◦ 分解するだけでなく組み合わせた上で突き合わせる必要があったりもするが • 情報をぼんやり眺めずに、関連するだろうものを連想させていく ◦ 「ん?これはだれが動くべき仕様だ?」 → ユーザかサーバかクライアントか

    ◦ 「なにが目的でこれが必要なんだ?状況や条件は?」 ▪ どれもこれも(自分が)対応する必要があるわけではない ▪ ただ誰が(何が)対応するものなのか認識しないと混乱する • 連想するためには知識のプールが必要 ◦ 薄くても水を張りましょう …(遠い目 組み合わせ爆発に負けない
  9. 一次情報じゃなくてごめんなんだぜ… • ruby-jp Slack の #authz チャンネル ◦ IETF(Internet Engineering

    Task Force)Meeting の出席者のかたがいるので、まじで未来の話題が 知 れる ◦ 他にもちゃんと認証認可に詳しいひとが居てくれてる ◦ 私が作ったチャンネルなんだけど、勢いで作ってよかった :やったぜ: • 認証認可 Advent Calendar 2019 ◦ https://qiita.com/advent-calendar/2019/identity ◦ 基礎やらセキュリティやら未来の話やらも入っててお得(?) 直近の情報源
  10. • 認可: XYZ ◦ 一部の通称では OAuth 3.0 なんて話も。OAuth 2.0 との互換性は無視される(!)

    ◦ "OAuth 2.0 複雑だしトランザクション中心に整理しようぜーというプロジェクト " ◦ Advent Calendar 記事おすすめ(上記は記事からの引用) ▪ https://qiita.com/corocn/items/85a84dd76fc1f2b88351 • 認可: OAuth 2.1(仮・通称) ◦ XYZ とはまた別で、増えすぎた OAuth 2.0 の追加仕様などなどを1つにまとめなおそうぜ、という話 ◦ XYZ やそれ以外も含めて IETF meeting 参加者の方のスライドが :わかりやすい: :勉強になる: ▪ https://speakerdeck.com/sylph01/oauth-transactional-authorization-at-ietf106 ざっくりした未来