OAuth
#auth
アクセストークン取得までの基本的な流れ(一般的なWEBアプリ)
ログインなどで認証
-> 認証コード発行
-> callback_urlへリダイレクト
-> アクセストークン発行リクエスト
-> アクセストークン払出し
ログイン時はclient_id、callback_url、state(リクエスト元が任意に設定)くらいを受け取る
client_idのチェック、callback_urlの絶対パスチェック
認証コードの有効期限は1度切りで良い想定(時間でやるなら60秒とか)
callback_urlへ認証コード、state含めて送信
アクセストークンの発行リクエストは、client_id、client_secret、認証コード、callback_url含めてリクエスト貰う。
client_idはauthorizationヘッダーに含めるかPOSTのbodyに含めるかどちらか。
authorizationヘッダーに含める場合は、Basic base64 urlencode(client_id + ':' + client_secret)した値
POSTはそのまま属性=値で放り込んどけばOK
client_idが両方にセットされている場合はエラーにしちゃって良い
oauth in actionのコードがそうなっているというだけで理屈は判ってない
どちらかをサポートして、両方はするなってことっぽい
client_secretを使わないインプリジット方式のときは、リフレッシュトークン含めない
client_secretを含める場合はリフレッシュトークン含める
リフレッシュトークン含めるときは、アクセストークン自体は短命にする
リフレッシュトークンでアクセストークンを再発行する
リフレッシュトークンの再発行はオプション
リフレッシュトークンを再発行しない場合は、リフレッシュトークンの有効期限切れのタイミングで、再認証が必要
これを踏まえると開発時は再発行しないモードを用意しといて、本番では再発行を強要してしまうと、基本的に再認証が必要なくなるんじゃないかなー(という所感)