ソフトウェア

SNSなどでアクセス権限を与えるために利用される「OAuth 2.0」はどのように動作しているのか?


SNSや音楽ストリーミングサービスなど、個人情報を含むアカウントを管理するために使われるのが「OAuth」です。クラウドサービスを提供する「Gravitational」に勤めるVirag Mody氏が、2012年以降のバージョンであるOAuth 2.0の概要を説明しています。

Everything You Need to Know About OAuth (2.0)
https://gravitational.com/blog/everything-you-need-to-know-about-oauth/

アカウントの認証においては、アカウントの所有者やFacebook、Spotifyなどのアカウントを提供するサービスなど、複数の要素が存在しており、OAuthでは下記4種類の「ロール」と呼ばれる役割を認証における各要素に対して与えるとのこと。

・リソースオーナー:保護されたリソースへのアクセスを許可する要素。アカウントの所有者
・リソースサーバー:保護されたリソースを提供し、アクセス要求を処理するサーバー
・クライアント:リソースサーバーにアクセスし、リソースオーナーに代わってアクションを実行したいアプリケーション
・認可サーバー:クライアントがリソースサーバーにアクセスすることを許可できるサーバー

Mody氏はOAuthで認証を行う一連の流れについて、「Spotifyのアカウントを持つボブが、FacebookとSpotifyの連携を行う」事例を元に説明しています。


Spotifyはまず、アカウントを所有する「リソースオーナー」であるボブにメッセージを送り、ボブの公開プロフィール、友人リスト、メールアドレス、誕生日へのアクセス権を要求するとMody氏。ここで、Spotifyは「クライアント」にあたります。次に、ボブはSpotifyに対しデータ収集を認可します。認可を得たSpotifyはFacebook APIに認可を通知。Facebook APIは認可を検証し、保護されたリソースにアクセスするためのアクセストークンをSpotifyに送信します。このアクセストークンを送信するサーバーは「認可サーバー」にあたります。Spotifyは、認可サーバーから通知された「認可サーバー」のAPIとは別の「リソースサーバー」であるFacebook APIにアクセストークンを送信し、Facebook APIはデータをSpotifyに送信するという流れであるとのこと。


アクセストークンは「スコープ」と呼ばれる変数を持っています。Mody氏はアクセストークンとスコープの関係を映画のチケットに例えており、アクセストークンはチケットそのもの、スコープはチケットに書かれた映画の名前にあたるとのこと。スコープには一般的に「読み込みアクセス」「書き込みアクセス」「読み書きアクセス」「アクセス不可」の4種類があります。トークンには他にも「リフレッシュトークン」と呼ばれる、期限切れなどでリソースが取得できなくなった時に自動的に新しいアクセストークンを取得するために使用されるトークンもあると説明されています。

映画館の例をもう一度考えてみると、映画のチケットを購入する方法には「映画館で購入する方法」と「オンラインで購入する方法」など複数あるように、OAuthの認可フローも複数存在するとのこと。Mody氏は「認可コードグラント」「PKCE拡張を利用した認可コードグラント」「クライアント認証」「デバイスコード」による認可を説明しています。

「認可コードグラント」は最も一般的な認可フローで、クライアントが認可サーバーから受け取った一意のコードをトークンと交換する方法です。トークンを受け取るために必要なステップを2段階に分割することで、認可サーバーはトークンを発行する前にクライアントに関する重要な情報を確認することができるとのこと。PKCE拡張を利用した認可コードグラントは、PKCEを使用してクライアントとサーバ間の通信が傍受されていないことを確認するためにハッシュを転送する方法です。

「クライアント認証」は、クライアントがクライアント自身に対するアクセス認可を要求している場合に利用されるフローであるとのこと。この場合、クライアントは「client_id」と「client_secret」という変数を含むリクエストを行います。「デバイスコード」は、コントローラーと仮想キーボードを使用してサインインするゲーム機やスマートテレビのようなデバイスで利用されるフローであるとのこと。


Mody氏はGitHubのシングルサインオンにおけるOAuthの実装を用いてOAuthによる認証を説明しています。まずアプリケーションがリソースオーナー間で認証が行われ、リソースオーナーは認可サーバーへ認証を要求。認可コードグラントによる認証が行われているので、認可サーバーはアプリケーションに認証コードとアクセストークンを発行しています。認証コードをアクセストークンに変換したアプリケーションは、アクセストークンをリソースサーバーに送信して、リソースにアクセスしています。


OAuthは見過ごされがちな便利さを提供していますが、複雑なプロトコルであり、実装には時間がかかるとのこと。Mody氏は「あなたがOAuthに対する包括的で十分な理解を得られることを願っています」とコメントしています。

この記事のタイトルとURLをコピーする

・関連記事
Twitterでついに電話番号不要で2要素認証を行うことが可能に - GIGAZINE

TwitterのAPI規制を回避できる公式クライアントのコンシューマーキー - GIGAZINE

「フォートナイト」のアカウントをハッカーに盗まれてしまう脆弱性が見つかる - GIGAZINE

Motorolaが自社のスマートフォンから個人情報を収集していることが発覚 - GIGAZINE

in ソフトウェア,   ネットサービス,   ウェブアプリ, Posted by log1n_yi

You can read the machine translated English article here.