ユーザーまたは開発者としてDigitalOceanでOAuth認証を使用する方法

前書き

DigitalOcean APIのバージョン2には、すべてのユーザーのエクスペリエンスを改善する多くの変更が含まれています。 最も重要な新機能の1つは、ユーザーとアプリケーションのOAuth認証です。

OAuthシステムでは、APIを使用してアカウントで認証できます。 このアクセスは、単純なユースケースのために個人アクセストークンの形式で付与できますが、アプリケーションがアカウントにアクセスできるようにする柔軟性も可能にします。

このガイドでは、アプリケーションのアカウントへのアクセスを許可または取り消す方法について説明します。 また、APIを活用するアプリケーションをDigitalOceanに登録する方法を説明することで、相互作用のもう一方の側面についても説明します。 これにより、OAuthを使用してユーザーのアカウントへのアクセスをリクエストできるようになります。

アカウントをユーザーとして使用するアプリケーションの承認

アプリケーションにアカウントへのアクセスを許可するだけの場合は、アプリケーションから承認を付与し、DigitalOceanコントロールパネルからアクセスを取り消すことができます。

DigitalOceanのOAuth認証を利用するアプリケーションを使用する場合、アプリケーションにDigitalOceanアカウントへのアクセスを許可するかどうかを選択するページにリダイレクトされます。

ページは次のようになります。

image:https://assets.digitalocean.com/articles/apps_and_api/auth_request.png [DigitalOcean app auth request]

要求は、アプリケーションが読み取り専用アクセスを要求しているか、読み取りおよび書き込みアクセスを要求しているかを定義します。 要求されたアクセスを許可することを決定した場合、アプリケーションに戻り、アカウントで操作するための認証が行われます。

アクセスを取り消す場合は、DigitalOceanアカウントに移動して、コントロールパネルの左側のナビゲーションメニューにある[Apps&API]セクションをクリックします。

image:https://assets.digitalocean.com/articles/apps_and_api/left_nav.png [DigitalOcean left-hand nav]

「承認済みアプリケーション」セクションの下に、アクセスを許可した各アプリケーションのエントリが表示されます。

image:https://assets.digitalocean.com/articles/apps_and_api/authorized_app.png [DigitalOcean承認済みアプリ]

「取り消し」ボタンをクリックして、アカウントへの関連アプリケーションのアクセスを削除します。

image:https://assets.digitalocean.com/articles/apps_and_api/revoke_access.png [DigitalOcean oauth revoke]

アプリケーションはアカウントにアクセスできなくなります。

OAuthを使用して開発者としてユーザーを認証する

OAuthを開発者として利用するには、2つの別個のプロセスを実行する必要があります。 最初に、アプリケーションを登録して、アクセスを要求するために必要な資格情報を取得する必要があります。 その後、アプリケーションを開発して、ユーザーのブラウザとDigitalOceanサーバーの両方からの要求を正しく行い、応答を処理する必要があります。

DigitalOceanでの開発者アプリケーションの登録

OAuthを介してユーザーを認証する必要がある開発者の場合、最初にDigitalOceanコントロールパネルでアプリケーションを登録する必要があります。

コントロールパネルの「https://cloud.digitalocean.com/settings/applications[Apps&API]」セクションのページ中央に、「Developer Applications」というタイトルのセクションがあります。

image:https://assets.digitalocean.com/articles/apps_and_api/developer_apps_section.png [DigitalOcean開発者アプリケーションセクション]

新しいアプリケーションを登録するには、右側の「新しいアプリケーションの登録ボタン」をクリックします。

image:https://assets.digitalocean.com/articles/apps_and_api/register.png [DigitalOcean登録アプリ]

登録ページに移動します。

image:https://assets.digitalocean.com/articles/apps_and_api/app_info.png [DigitalOceanアプリ登録情報]

ここでは、アプリケーションの名前やホームページなどの基本的な情報を提供し、簡単な説明を提供する必要があります。 この情報は、ユーザーの承認リクエストページに表示されることに注意してください。

また、アプリケーションのコールバックURLを提供する必要があります。 これは、承認応答を処理するようにアプリケーションを構成する場所です。 OAuthリクエストを処理するために必要なものの詳細については、次のセクションまたはリンク:[OAuth認証]ガイドを参照してください。

詳細を送信すると、指定したコールバックURLに存在する承認アプリケーションまたはスクリプトの作成に必要な情報を含むページが表示されます。 これには、クライアントID、クライアントシークレット、およびユーザーを以下にリダイレクトするための事前にフォーマットされた認証リクエストリンクが含まれます。

image:https://assets.digitalocean.com/articles/apps_and_api/app_details.png [DigitalOceanアプリの詳細]

アプリケーションにDigitalOcean OAuthを実装する

OAuth認証を実装するには、アプリケーションは最初に次のエンドポイントにユーザーをリダイレクトする必要があります。

https://cloud.digitalocean.com/v1/oauth/authorize

このリダイレクトには、クライアントID、値としてコールバックURL、および「+ redirect_uri 」を含め、「 response_type = code 」を設定する必要があります。 オプションで、リクエストしているトークンのスコープを設定できます(例: フルアクセスの場合は「 scope = read%20write + `」。 リダイレクトの例は次のようになります。

https://cloud.digitalocean.com/v1/oauth/authorize?client_id=&redirect_uri=&response_type=code&scope=read%20write

ユーザーがアクセスを許可した後、指定されたコールバックURLにリダイレクトされると、キャプチャする必要のあるコードがクエリパラメーターとして含まれます。

次に、POSTリクエストを送信します:

https://cloud.digitalocean.com/v1/oauth/token

クライアントID、クライアントシークレット、コールバックURL、 `+ redirect_uri `の値、ユーザーリダイレクトから受け取ったコードを含め、 ` grant_type = authorization_code +`を設定します。 リクエストの例は次のようになります。

https://cloud.digitalocean.com/v1/oauth/token?client_id=&client_secret=&code=&grant_type=authorization_code&redirect_uri=

応答全体は次のようになります。

{"provider"=>:digitalocean, "info"=>{"name"=>"some_name", "email"=>"[email protected]"}, "credentials"=>{"token"=>"", "expires_at"=>1405443515, "expires"=>true}, "extra"=>{}}

その後、後続のリクエストで「++」を使用して、ユーザーのアカウントでアクションを実行できます。

ほとんどの開発者は、選択した言語のOAuthライブラリを利用してこのプロセスを簡素化しますが、舞台裏で何が起こっているのかを一般的に把握しておくと便利です。

受け入れられたスコープ

スコープを使用すると、必要なアクセスのタイプを指定できます。 スコープは、OAuthトークンのアクセスを制限します。 DigitalOcean OAuthエンドポイントで受け入れられるスコープのリストは次のとおりです。

Name Description

(no scope)

Defaults to read scope.

read

Grants read-only access to user account. This allows actions that can be requested using the GET and HEAD methods.

read write

Grants read/write access to user account, i.e. full access. This allows actions that can be requested using the DELETE, PUT, and POST methods, in addition to the actions allowed by the read scope.

開発者向けリソース

omn​​iauth-digitalocean Gem

DigitalOceanは内部でRubyを使用するため、コミュニティが使用するオープンソースOAuth戦略を提供しています。 omniauth-digitalocean gemはGithubにあり、RubyGemsに公開されています。 これは、https://github.com/intridea/omniauth [OmniAuth]に基づいています。これは、マルチプロバイダー認証で広く使用されているRackベースのライブラリで、「DigitalOceanでサインイン」をRailsおよびRackフレームワークに統合する簡単な方法です。

結論

OAuthは、アプリケーションにアカウントへのアクセスを許可したり、ユーザーにアカウントへのアクセスを要求したりする確立された方法です。 DigitalOceanの「Apps&API」ページは、このプロセスを両当事者にとってできるだけ簡単にするよう努めています。

DigitalOceanのOAuth APIの技術的概要については、https://developers.digitalocean.com/oauth/ [DigitalOcean OAuth Overview]をクリックしてください。

OAuthの仕組みの詳細については、コミュニティの記事https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2[OAuth 2の概要]をご覧ください。