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

速習 OAuth2.0とOpenID Connect - CADDi STUDDi

速習 OAuth2.0とOpenID Connect - CADDi STUDDi

[email protected]

January 21, 2022
Tweet

Other Decks in Technology

Transcript

  1. 今日話すこと
 • 認証認可
 • OAuth 2.0
 • OpenID Connect
 •

    アクセストークン
 • 認可リクエスト

  2. 認証と認可
 • 認証(Authentication)
 ◦ 通信相手が誰か確認すること。 
 ◦ 「あなたは誰?」に答える。
 • 認可(Authorization)


    ◦ リクエストに対して権限が許可されているか。 
 ◦ 認証が成功した結果、その人がどのような権限を持っているか。 
 ◦ 「あなたが誰かはわかっている。権限があるか確認させてくれ。」 
 ◦ 本日のメイントピック。
 参考: https://dev.classmethod.jp/articles/authentication-and-authorization/ 

  3. 認証認可に関連するプロトコルとサービス
 • プロトコル
 ◦ OAuth 2.0
 ◦ OpenID Connect
 ◦

    GNAP
 ◦ SAML
 • サービス
 ◦ Auth0
 ◦ Okta
 ◦ Ping Identity
 ◦ OneLogin
 ◦ Authlete

  4. OAuth 2.0
 • 認可のフレームワーク。
 • アクセストークンを使ってAPIアクセスするための権限を委譲することができる。
 • IETFのOAuth working Groupが推進している。


    ◦ 最近はOAuth 2.1を頑張っている。(後述) 
 
 • ざっくり言うと...
 • アクセストークンの発行手順を策定した技術仕様

  5. OAuth 2.0 Security Best Current Practice
 • セキュリティに関する事項をまとめたもの。
 ◦ PKCEを使いましょう。


    ◦ Implicit Flowは使うべきではない。 
 ◦ など。
 • OAuth 2.1はこのPracticeを組み込んだ内容になっている。
 小ネタ
 PKCE = Proof Key for Code Exchange 

  6. OpenID Connect
 • OAuth 2.0を拡張して作成されたフレームワーク。
 ◦ OpenID + OAuth 2.0

    = OpenID Connect 
 • OpenID Foundationが推進している。
 ◦ ベースとなるOpenID Connect Coreに様々な追加仕様も定義している。 
 ◦ 例:FAPI, eKYC and IDA, CIBA.
 
 • ざっくり言うと...
 • アクセストークンに加えてIDトークンを発行する技術仕様を追加したもの。

  7. OIDCで最近話題になるトピック
 • Financial-grade API(FAPI)
 ◦ 金融サービスでのユースケースに対応した仕様。 
 ◦ セキュリティが一段と厳しく定義されている。 


    • Client Initiated Backchannel Authentication Flow(CIBA)
 ◦ リソースサーバーにアクセスするサービスに対して、別のデバイスから認可を行う仕様。 
 • Identity Assuarance(OIDC for IDA)
 ◦ eKYC、つまり身元確認をする仕様。 
 小ネタ
 PKCE = Proof Key for Code Exchange 

  8. アクセストークンの検証方法
 • 認可サーバーが公開鍵をホスティングしている。
 ◦ .well-known/jwks.json
 ◦ JWKS(Json Web Key Sets)


    • リソースサーバーがJWKSを使って、アクセストークンの署名を検証する。
 クライアント (Reactアプリ) リソースサーバー (BFF) トークン
 認可サーバー (Auth0) JWKS 検証して不正だったら→401 
 有効期限が切れていたら→401 
 権限が足りなかったら→403 
 401 Unauthorized

  9. 認可リクエストをアプリに実装する前に
 • どのタイプのアプリケーションが実施する?
 ◦ Regular Web Application
 ◦ Single Page

    Application
 ◦ Native Application
 ◦ それぞれで設定するパラメータや気をつける点が異なるので注意。 
 • Auth0の場合、ライブラリが提供している機能を利用すれば最新セキュリティ事情は 満たした実装にはなる。

  10. 認可リクエストのタイプ
 • 󰢏Authorization Code Flow
 ◦ 基本のフロー。これを使いましょう。Auth0ライブラリはデフォルトこれです。 
 ◦ SPAやネイティブアプリの場合、PKCEもちゃんと使いましょう。

    
 
 • 󰢃Implicit Flow
 ◦ 現在は非推奨になっています。
 
 • 󰤇Hybrid Flow
 ◦ 特殊なユースケースで使うフロー。覚えなくても良い。 

  11. PKCEによる対策
 リソースサーバー ネイティブアプリ 認可サーバー /authorize ?response_type=code &response_mode=query &redirect_uri={Custom_URL} &code_challenge={AAA} &code_challenge_method=S256

    /callback?code=ABCDEF 認可リクエスト 
 /oauth/token code code 
 Custom URL Schemeを 競合させたアプリ code_verifierがないので トークンを返却しない 正規アプリは code_verifierの値を知っ ているので/tokenが成功 する code verifier PKCE = Proof Key for Code Exchange 
 code_verifier知らない...
  12. Implicit Flowは非推奨
 リソースサーバー ネイティブアプリ 認可サーバー /authorize ?response_mode=token &response_type=fragment /callback #token=${access_token}

    認可リクエスト 
 ※OIDCの文脈だとIdPと呼ばれる 
 token 先程の認可コード乗っ取り攻撃の例と同じ で、tokenの返却先が認可リクエスト発行元と 同一であることが保証できない。 

  13. まとめ
 • OAuth 2.0とOpenID Connectの違い
 ◦ OAuth 2.0はトークンを使ったAPIアクセスのフレームワーク 
 ◦

    OpenID ConnectはOAuth 2.0を拡張したフレームワーク 
 • アクセストークン
 ◦ JWT
 ◦ サーバー側で検証(JWKS)
 • 認可リクエスト
 ◦ クエリパラメーター
 ◦ PKCE