OAuthとトークン認証

luagate/oauth-token-introOAuth入門21セキュリティ

上から下へ、全 21 枚そのまま並べています。

発表モードで開く

OAuth入門

OAuthとトークン認証

鍵を渡さず許可する 〜安全に「許可」を渡すしくみ〜

1
1

目次

今日の流れ

1. パスワードを渡したくない問題

2. OAuthという解決策

3. アクセストークンとスコープ

4. トークンの寿命とJWT

5. まとめと振り返り

2
2
OAuth入門 - イントロ

今日のゴール

この時間で身につけてほしいことです。

  • OAuthが「許可を渡すしくみ」だと分かる
  • パスワードを渡さずに連携できる理由が分かる
  • アクセストークンの役割をイメージできる
  • スコープと有効期限の意味が分かる
  • セッションとトークンのちがいを知る
10
3
OAuth入門 - イントロ

OAuth とは

パスワードを渡さずに、必要な範囲だけアクセスを許可するしくみです。

OAuth(オーオース)

自分のパスワードを第三者アプリに教えることなく、特定のデータや操作だけを許可するための仕組み。家の鍵そのものではなく、限定的な「許可証」を渡すイメージ。

パスワードは相手に渡さない

必要な範囲だけ許可する

あとから許可を取り消せる

多くのサービスで使われている

12
4
OAuth入門 - イントロ

鍵ではなく許可証を渡す

家の合鍵をたとえに考えると、OAuthの良さが見えてきます。

合鍵を渡すと
  • 家中どこでも入れる
  • 怖くて渡せない
許可証を渡すと
  • 玄関だけなど範囲を限定
  • 安心して渡せる
取り消せる
  • いつでも無効にできる
  • パスワードは変えずに済む
13
5

OAuth入門 - 体験

2

第2部 ログイン体験

Googleでログインの裏側

20
6
OAuth入門 - 体験

「Googleでログイン」の体験

見慣れたあのボタンの裏で、OAuthと、その上で本人確認を担うOpenID Connectが働いています。

  • 新しいサービスでGoogleログインを選ぶ
  • Googleの画面で許可するか聞かれる
  • 許可するとサービスに戻れる
  • Googleのパスワードはサービスに渡らない
  • ログイン(本人確認)はOAuthの上に乗るOpenID Connectが担う
21
7
OAuth入門 - 体験

OAuthの流れ(ざっくり)

許可を出してからトークンを受け取るまで、こう進みます。

1. 連携を依頼

サービスがGoogleに許可を求める

2. 本人が許可

Googleの画面で利用者が同意する

3. トークン発行

Googleがアクセストークンを渡す

4. データ取得

サービスはトークンで必要な分を取得

22
8
OAuth入門 - 体験

アクセストークン とは

許可されたことを示す「合言葉」のようなものです。

アクセストークン

OAuthで許可が下りたときにサービスへ渡される文字列。これを提示することで、パスワードなしに許可された範囲のアクセスができる。入場券のような役割を持つ。

許可の証となる文字列

リクエストのたびに提示する

パスワードの代わりにはならない

盗まれると悪用されるので扱いに注意

23
9

OAuth入門 - トークン

3

第3部 スコープとトークン

範囲と寿命を決める

30
10
OAuth入門 - トークン

スコープ(許可範囲)

トークンで「どこまでできるか」を表す範囲の指定です。

スコープ(Scope)

そのトークンで許可される操作やデータの範囲。プロフィール閲覧だけ、メール送信も可、などきめ細かく指定でき、最小限にするほど安全になる。

閲覧のみ・編集も可などを指定

必要な範囲だけに絞れる

利用者は許可画面で確認できる

最小限にするのが安全のコツ

31
11
OAuth入門 - トークン

トークンを使うリクエストの例

アクセストークンは、こうしてリクエストに添えて使います。考え方のイメージです。

http
GET /api/profile HTTP/1.1
Host: api.example.com
Authorization: Bearer abc123tokenXYZ

# サーバーはトークンを確認し
# 許可された範囲だけ応答する
32
12
OAuth入門 - トークン

トークンの寿命とリフレッシュ

トークンはあえて短命にして、安全性を高めています。

有効期限とリフレッシュトークン

アクセストークンには有効期限があり、切れたら使えなくなる。期限切れのときは、別に渡されるリフレッシュトークンで新しいアクセストークンを取り直す。

アクセストークンは短命なことが多い

切れると再発行が必要になる

リフレッシュトークンで取り直す

盗まれても短時間で無効になる

33
13
OAuth入門 - トークン

トークンの寿命のイメージ

用途ごとに有効期間が大きく異なります。あくまでイメージの比較です。

40000 分(イメージ)32000240001600080000
60分(イメージ)
1440分(イメージ)
40000分(イメージ)
アクセストークン
リフレッシュトークン
連携そのもの

出典: トークン寿命の傾向を示す概念図(概算)

34
14

OAuth入門 - 仕組み

4

第4部 中身とちがい

JWTとセッションの比較

40
15
OAuth入門 - 仕組み

JWTの中身(軽い紹介)

JWTはトークンの一種で、中に情報を持たせられます。デコードした中身のイメージです。

json
{
  "sub": "user_12345",
  "name": "Yamada Taro",
  "scope": "profile email",
  "exp": 1718000000
}
41
16
OAuth入門 - 仕組み

セッションとトークンのちがい

状態をどこで覚えるかが、両者の大きな分かれ目です。

セッション方式

  • サーバー側に状態を保存
  • ブラウザはIDだけ持つ
  • サーバーをまたぐと共有が手間

トークン方式(JWTなど自己完結型)

  • トークン自体に情報を持つ
  • 保存不要にできる(不透明トークンは検証が必要)
  • 複数サービスに広げやすい
42
17
OAuth入門 - まとめ
クイズ

振り返りクイズ

今日の内容を確認しましょう。

OAuthの一番の特徴として正しいものはどれ?

A
相手にパスワードを渡して連携する
B
パスワードを渡さず必要な範囲だけ許可する
C
通信を暗号化する専用の方式
D
ファイルを圧縮して送る方式
50
18
OAuth入門 - まとめ
答え

振り返りクイズ 解答

OAuthの一番の特徴として正しいものはどれ?

A
相手にパスワードを渡して連携する
B
パスワードを渡さず必要な範囲だけ許可する
C
通信を暗号化する専用の方式
D
ファイルを圧縮して送る方式

OAuthはパスワードを相手に渡さず、必要な範囲だけアクセスを許可するしくみです。許可の証としてアクセストークンが渡され、スコープで範囲を限定できます。

51
19
OAuth入門 - まとめ

質疑・次回予告

今日のまとめと、次に学ぶテーマです。質問があればここで受け付けます。

今日のおさらい
  • OAuthは鍵でなく許可証を渡す
  • トークンとスコープで範囲を絞る
  • トークンは短命で安全性を保つ
次回予告
  • 証明書と認証局を学ぶ
  • 本物だと証明するしくみ
52
20
"

OAuthは「鍵を渡さず許可を渡す」しくみ。パスワードを共有せず、必要な範囲だけを期限付きで貸す。だから連携は便利なのに、安全を保てるのです。

OAuth入門

53
21