OAuth2.0
概要
OAuth2.0はサードパーティアプリケーションによるHTTPサービスへの限定的なアクセスを可能にする認可フレームワークである。
OAuthとはあくまでも認可のための機構
OAuthを使えばユーザーはサードパーティアプリにユーザー名、パスワードを教える必要がない
概念
https://gyazo.com/c30274d153e439ec94d90346610ecc3b
エンティティ
リソースオーナー
ユーザ
クライアント
ユーザーに変わってアクセスを要求するwebアプリ
webアプリ、モバイルアプリetc
コンフィデンシャルクライアント、パブリッククライアント
リソースサーバー
WebAPI
リソースサーバーへのアクセスには常にアクセストークンが含まれないといけない
認可サーバー
アクセストークンを発行するサーバー
トークン
アクセストークン
誰のどのリソースにどのような操作を行うことが許可されているか
スコープと有効期限
code:スコープの例
GooglePhotoのリソースに対する読み込み権限
リフレッシュトークン
アクセストークンよりも長い期限を持つ
認可サーバーに送ることで新しいアクセストークンを発行できる
認可コード
リソースオーナーが「権限委譲」に同意した証として発行される
認可サーバーにアクセストークンの要求をする時に使用する
認可コードを利用できるのは一度だけ。10分以内でしか使用できない
ブラウザーを介してクライアントに届くので流出のリスクが高い
クライアントの登録
クライアントID
クライアントシークレット
クライアントから認可サーバーに対するリクエストの中で使用
シークレットは認証のため
このシークレットを安全に保管できる構造なのか?否かでグラントタイプが異なってくる
エンドポイント
認可エンドポイント
認可サーバー
認可コードを発行する→リダイレクトエンドポイントに送る
トークンエンドポイント
認可サーバー
Basic認証でクライアントを認証する→(クライアントID、クライアントシークレット)
アクセストークンを発行する
リダイレクトエンドポイント(リダイレクトURI)
クライアントが設定する
認可サーバーが認可コードを303でリダイレクトしてクライアントに認可コードを送る
認可コードはクエリパラメータとして渡される
グラントタイプ
参照