OAuth2
===
###### tags: `skills`
## OAuth2とは
HTTP上で認可(認証ではなく、認可)を行うためのプロトコル。
OAuth2とは、外部サービスのアカウント情報を使ってパスワードなしでユーザー情報にアクセスできる仕組み。
OAuthの仕組みにはバージョンがあり1.0と2.0で仕組みが異なる。
[RFC6749](https://tools.ietf.org/html/rfc6749)(The OAuth 2.0 Authorization Framework)で定義されている4つの認可フローがある
- 認可コードフロー: Authorization Code Grant
1. 認可エンドポイントに認可リクエストを投げる
2. 応答として短命の認可コードを受けとる
3. その認可コードをトークンエンドポイントでアクセストークンと交換する
- インプリシットフロー: Implicit Grant
1. 認可エンドポイントに認可リクエストを投げる
2. 応答として直接アクセストークンを受け取る
- リソースオーナー・パスワード・クレデンシャルズフロー: Resource Owner Password Credentials Grant
1. トークンエンドポイントにトークンリクエストを投げる
2. 応答としてアクセストークンを受け取る
- クライアント・クレデンシャルズフロー: Client Credentials Grant
1. トークンエンドポイントにトークンリクエストを投げる
2. 応答としてアクセストークンを受け取る
また、リフレッシュトークンを用いてアクセストークンの再発行を受けるフローもある
- リフレッシュトークンフロー: Refreshing an Access Token
1. 事前に発行を受けていたリフレッシュトークンをトークンエンドポイントに提示
2. アクセストークンの再発行する
認可コードフロー
Authorization Code Grant
---

インプリシットフロー
Implicit Grant
---

リソースオーナー・パスワード・クレデンシャルズフロー
Resource Owner Password Credentials Grant
---

クライアント・クレデンシャルズフロー
Client Credentials Grant
---

リフレッシュトークンフロー
Refreshing an Access Token
---

参考
---
- https://qiita.com/TakahikoKawasaki/items/200951e5b5929f840a1f
- https://qiita.com/RingCaptcha/items/1a66adfcd25992ef2020