OAuthトークンとは何か? 委譲されたアクセスの解説
OAuthトークンは、OAuthフローを通じて発行される認証情報で、パスワードを共有することなく、ユーザーやアプリケーションに代わってクライアントにAPIへのスコープ付きかつ有効期限付きのアクセスを付与します。
OAuthを使うと、アプリは生の認証情報を渡すことなく、ユーザーまたは自身に代わって動作できます。その結果得られるのが、特定のスコープと有効期限を持つaccess tokenです。pipelineはdeployに使うAPIに対して認証するためにOAuthトークンを使い、トークンの問題は401失敗の頻繁な原因となります。
委譲されスコープ付きのアクセス
パスワードを共有する代わりに、OAuthは要求された権限(スコープと呼ばれる)だけを付与するトークンを発行します。トークンはその限定された権限をAPIに対して表現します。
access tokenとrefresh token
- access tokenは短命で、各リクエストとともに送信されます。
- refresh tokenは再ログインなしで新しいaccess tokenを取得します。
- スコープはトークンが許可される操作を制限します。
どう送信されるか
OAuthのaccess tokenは通常、Authorizationヘッダーにbearer tokenとして提示されます。APIはそれを検証し、呼び出しを許可する前にそのスコープを確認します。
CI/CDにおけるOAuthトークン
pipelineはトークンをsecretとして保存し、deployやプラットフォームのAPIを呼び出すために使います。実行ごとに発行される短命のトークンは、secretに残り続ける長命のものよりも安全です。
なぜ呼び出しが401や403で失敗するのか
期限切れのトークンは401を返し、必要なスコープを欠くトークンは403を返します。どちらも決定的な認証の問題でありネットワークの揺らぎではないため、修正は新しいトークンまたはより適切なスコープのトークンです。
一時的な失敗と認証の失敗
有効なトークンを提示している最中の接続断は一時的でretry可能ですが、401はそうではありません。Latchkeyのrunnerは、一般的なendpointへの一時的な転送障害をretryしつつ、真の認証エラーを表面化させ、あなたがトークンを更新できるようにします。
重要なポイント
- OAuthトークンは、パスワードを共有せずにスコープ付きかつ有効期限付きのアクセスを付与します。
- access tokenは短命でbearer tokenとして送信され、refresh tokenがそれを更新します。
- 401や403は決定的な認証の問題であり、retry可能な揺らぎではありません。