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

NとZの違い

Yuto Takamune
December 26, 2020

 NとZの違い

認証と認可ってわかりにくいよね。認可の略称はAuthN、認証の略称はAuthZ。一文字しか変わらない。たとえばOIDCはOAuthにアイデンティティレイヤーを付与したものって言われてるけど、そもそもアイデンティティレイヤーって何?ってなっちゃう。そこら辺をいい感じに説明したくてこの資料を作ったんだ。あとはOAuth認証だね。OAuth認証なんてものは存在してはいけないんだけど、なぜかOAuthにユーザープロフィール取得APIを組み合わせたものがOAuth認証なんて呼ばれてる。声を大にして言いたい。OAuthは認可のプロトコルであり、認証のプロトコルではないんだ。

Yuto Takamune

December 26, 2020
Tweet

More Decks by Yuto Takamune

Other Decks in Research

Transcript

  1. じこしょーかい • ⼈間です • しんぶんぶん(@shinbunbun_) • 3/14に最寄駅が増えた⾼校に通ってる3年⽣ • 春から会津⼤学へ進学予定 •

    中3の11⽉にプログラミング始めた • ⾼1の春にセキュマネ、⾼2の春に応⽤情報受かった • ⾼三の春に情報処理安全確保⽀援⼠をとろうとしたものの、コロナにより試験中⽌で敢えなく断念 • 普段はNuxt.jsとかNode.jsとか使ってWeb開発してる • 研究分野はSelf-sovereign identit(SSI)、Decentralized Identity(DID)、Verifiable Credentials (VC)など • 1⽉からR&Dインターンで主にVCに関する研究開発をする予定 • LINE API実践ガイド LINEログイン章執筆 • SGG運営メンバー。やたがいくんと⼆⼈でSGGアイデンティティ同好会的なものをやってる。 • LTスライド⽂字だけになりがち • 漢検3級
  2. もうちょっとちゃんと説明 • 認可(Authorization) • お前誰か知らんけどとりあえず ⼊館証持ってるから許可するわ →⼊館証を持っていれば「誰で も」⼊館を許可する →Bearerトークンを持っている相 ⼿に対して特定リソースへのアク

    セスを許可する(OAuth2.0) • 認証(Authentication) • ⼊館証を⾒て「お前はようかんだ な」と確認する • →相⼿が「誰」かを確認する ※純粋な認証にリソースは関係ない ※厳密には⼊館証を使った認証はAuthenticationではなくCertificationにあたる場合が多いですが、理解 を助けるためにここではこの例を使ってます。どちらも⽇本語では「認証」になります。
  3. OAuth2.0ってなぁに? • Bearerトークンとは • いわゆる持参⼈トークン • ユーザーに関する情報は⼀切なく、そのトークンを持参した⼈にリソー スへのアクセス権を与えるというもの • 先の例で挙げた、「認可」の⽅の⼊館証のようなもの

    • 持参⼈払い⼩切⼿(bearer check)が語源(らしい) • ⼩切⼿⾦額の受取⼈を記名せず単に持参⼈に⽀払う旨記載された⼩切⼿(コトバ ンクより抜粋) • 最終的に時間割botが受け取ったものはこのBearerトークンのみ • つまり、トークンの対象が「誰か」という「認証」は⼀切⾏っていない • 権限認可時のログインがあるためみんな混乱しがちだが、そこで⾏われ ているのはあくまでユーザーとGoogle間の認証であり、クライアント アプリケーション(ここでは時間割bot)は関与していない
  4. OAuth認証の何がダメなんですか? ① • インプリシットグラントではアクセストークンの⼊れ替えがで きてしまう • ⼀発アウト。レッドカード。退場。 • 認可コードグラントでも、Authorizationヘッダーのリクエスト にstateパラメータを含めるなどのちゃんとした実装をしないと、

    CSRF攻撃を受ける可能性がある • OAuthにおけるCSRFは、攻撃者が正規の⼿段で⼊⼿したRedirect URI と認可コードを被害者に実⾏させるという形で⾏われる • OAuthを単純に認可の⽬的のみで使⽤していた場合は被害を限定的に 抑えられるが、認証に使ってしまった場合、被害者は攻撃者のセッ ションでログインすることになってしまうため、被害が⼤きくなって しまう可能性がある
  5. そんなあなたにOpenID Connect(OIDC) • (Identity, Authentication) + OAuth 2.0 = OpenID

    Connect • 初めから認証のために作られたプロトコル • 仕様でちゃんと認証としての使い⽅が定められている • LINEログインなどで使⽤されている
  6. 宣伝 • LINE API実践ガイド • LINE API Expertをはじめとし た有識者たちが各LINE APIに

    ついてハンズオン形式で執筆し た本 • 僕はLINEログイン章を担当 • OpenID Connectに関する解説 も交えながら書いているので興 味がある⽅はぜひ
  7. じこしょーかい • ⼈間です • しんぶんぶん(@shinbunbun_) • 3/14に最寄駅が増えた⾼校に通ってる3年⽣ • 春から会津⼤学へ進学予定 •

    中3の11⽉にプログラミング始めた • ⾼1の春にセキュマネ、⾼2の春に応⽤情報受かった • ⾼三の春に情報処理安全確保⽀援⼠をとろうとしたものの、コロナにより試験中⽌で敢えなく断念 • 普段はNuxt.jsとかNode.jsとか使ってWeb開発してる • 研究分野はSelf-sovereign identit(SSI)、Decentralized Identity(DID)、Verifiable Credentials (VC)など • 1⽉からR&Dインターンで主にVCに関する研究開発をする予定 • LINE API実践ガイド LINEログイン章執筆 • SGG運営メンバー。やたがいくんと⼆⼈でSGGアイデンティティ同好会的なものをやってる。 • LTスライド⽂字だけになりがち • 漢検3級