LoginSignup
49
46

More than 3 years have passed since last update.

OAuthについて1から勉強した

Last updated at Posted at 2018-09-28

仕事でOAuthについて勉強する機会があったので、その際に学んだメモです。
実際の身近なサービスをイメージすると理解しやすかったです。

OAuthとは

Open Authorizationの略。
SNSやWebサービス間でHTTP上で「アクセス権限の認可」を行うためのプロトコルのこと。
たとえば、InstagramとFacebookに同じ写真を投稿する場合、通常であれば、InstagramとFacebookの両方に、ログインIDとパスワードを入力して、ログインが必要になるはず。
しかし、実際はInstagramへのログインだけでどちらにも投稿が可能となっています。
この共有機能に使われているのがOAuthプロトコルなのです。

つまり、

※OAuth2は「認証」する仕組みではなく、「認可」する仕組みです。
(どのサイトでも強調されていた...)

認証と認可の違い

認証:「誰が」通信相手かを確認する
認可:「誰が」「誰に」「何の権限を」出来る?を確認する

2018-09-19_12h55_53.png

OAuthを利用するメリット

  1. パスワードをサードパーティのアプリに渡すことなくAPIを利用できる
  2. どのリソースにアクセス可能かを細かくユーザーに認可させることができる
  3. ユーザーがパスワードを変更してもアクセストークンに影響がない
  4. ID/パスワードが漏洩したとしても、影響がない

OAuthにはOAuth 1.0 と OAuth 2.0 がある

OAuth 1.0 と OAuth 2.0 の仕組みについてはこちらの記事に
👉🏻https://murashun.jp/blog/20150920-01.html#chapter-3

OAuth1.0の問題点やOAuth2.0の特徴についてはこちらの記事に
👉🏻http://www.atmarkit.co.jp/fsmart/articles/oauth2/01.html

OAuthのクライアントタイプ

OAuthは2種類のクライアントタイプがある
• コンフィデンシャルクライアント (Confidential Client)
サーバ上で動くWebアプリなどのように、client_secretを秘密にできるクライアント。Confidential Clientはクライアント登録時にclient_idとclient_secretという情報を受け取る。

• パブリッククライアント (Public Client)
JSアプリやスマホ上のネイティブアプリなどのように、client_secretを秘密にできないクライアント。Public Clientはクライアント登録時にclient_idのみを受け取る。

OAuth2.0の発行フロー

OAuth2.0には4種類のフローがある

•  Authorization Code Grant(認可コードグラント)
•  Implicit Grant(インプリシットグラント)
•  Resource Owner Password Credentials Grant(リソースオーナーパスワードクレデンシャルグラント)
•  Client Credentials Grant(クライアントクレデンシャルグラント)
2018-09-20_11h05_02.png
The OAuth 2.0 Authorization Frameworkより
・・・
ちょっとよくわからないので、発行フローのシーケンス図が読めるようになろう...😥

認証の流れ

どのサービスがクライアント(サービスを使う側)、
そのサービスがサーバー(サービスを提供する側)に当たるのか意識すると理解しやすいと思います。
今回の例だと、
Facebookがサーバー(サービスを提供する側)
Instagramがクライアント(サービスを使う側)です。
InstagramがFacebookのOAuth機能を使って、Facebookに写真を投稿したい、という流れです。

登場人物(ロール)

Section 1.1 Rolesより

名前 役割 具体例
kaden_laptop.png Resource Owner(リソースオーナー) リソースへのアクセス権限を許可する人またはエンティティ ブラウザ
image.png Resource Server(リソースサーバー) Access Tokenを使ったリソースへのリクエストを受理してリソースを提供することのできるサーバー FacebookのAPIサーバー
image.png Client(クライアント) 権限に基づき、Resource Ownerの代理としてリソースを要求するアプリケーション(Webアプリでも、PC/モバイルアプリでも) ユーザーが使っているアプリやサービス
image.png Authorization Server(認可サーバー) リソースオーナーが認可し権限付与した後、Clientに対し、Access Tokenを発行するサーバー Facebookの認証サーバー

Instagramへのログインだけでfacebookに画像を投稿する場合

Authorization Code Grant Flow(認可コードグラントフロー)

2018-09-20_17h10_19.png

  1. ユーザー認可リクエスト
    1.png
    2.png

  2. 認可コードの発行&送付
    3.png
    4.png
    5.png

用語

・認可コード
 リソースへのアクセスを認可したことを示すコード
・アクセストークン
 リソースへアクセスする際にサーバーに渡されるトークン
・スコープ
 クライアントがアクセスできるリソースを制限するもの
 例:
  スコープ例1.png

参考サイト

一番分かりやすい OAuth の説明
https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be
今更聞けないOAuth2.0
https://www.slideshare.net/ph1ph2sa25/oauth20-46144252
OAuth 2.0 の仕組みと認証方法
https://murashun.jp/blog/20150920-01.html
OAuth(オーオース)認証とは | 仕組み・課題・利用例・背景 - 権限認可システム
https://boxil.jp/mag/a3207/

49
46
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
46