OAuth2.0によるGoogle+ APIのアクセス方法
Google+のAPIが先日公開されました。API Keyを使ってシンプルにAPIアクセスを試すことができるのですが、本来であればOAuth2.0にてアクセストークンを取得しAPIアクセスする方式でなければ今後公開されるであろうAPI群は利用できないはずですので、ここでOAuth2.0によるGoogle+ APIのアクセス手順を紹介しておきましょう。全手順において、プログラミングをすることなく試すことができます。
1. Client IDの発行
まずはClient IDやClient secretなどを発行しましょう。まずは、Google APIs ConsoleにWebブラウザでアクセスします。
https://code.google.com/apis/console/
まだプロジェクトを作成していないのであれば、Other projects→Create…にて新規にプロジェクト作成を行います。その後、Servicesタブを選択し、その中にあるGoogle+ APIをONにします。
次に、API Accessタブを選択します。Create an OAuth 2.0 client ID…というボタンがあるので、それを押します。
Create Client IDダイアログで最低限必要な入力項目はProduct nameのみです。何らかプロダクト名を入力し、Nextボタンを押します。次のページでは、Application typeとしてWeb applicationを選択し、Your site or hostnameの箇所ではhttp://localhostとなるように入力します。その後Create client IDボタンを押すことで、Client IDなどAPIアクセスに必要な情報が発行されます。
2. ユーザの認可
次に、ユーザにAPIアクセスの認可をしてもらい、その結果が反映されたAuthorization codeを入手します。これは、Webブラウザを利用し、https://accounts.google.com/o/oauth2/auth にアクセスします。その際、以下のクエリパラメータが必要になります。
- client_id : Google APIs Consoleで発行したClient ID
- redirect_uri : Google APIs Consoleで発行したRedirect URIs
- scope : “https://www.googleapis.com/auth/plus.me”
- response_type : “code”
この際、redirect_uriとscopeの値はURIエンコードされている必要があります。全体としては以下のようになるでしょう。
https://accounts.google.com/o/oauth2/auth ?client_id=723478066735.apps.googleusercontent.com &redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback &scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fplus.me &response_type=code
このURLにWebブラウザでアクセスすると、以下のように認可ページが表示されます。「アクセスを許可」ボタンを押すことで、Redirect URIにて指定したURLにリダイレクトされます。その際、codeクエリパラメータが付与されます。このcodeパラメータ値が、Authorization code値となります。
アクセストークンの取得
Authorization code値から、APIにアクセスするためのアクセストークンを取得します。これにはWebブラウザは使わず、ここではcurlコマンドを使用します。アクセストークンの取得は、https://accounts.google.com/o/oauth2/token にPOSTメソッドでHTTPリクエストを送ります。その際、以下のパラメータ値の指定が必要になります。
- client_id : Google APIs Consoleで発行したClient ID
- client_secret : Google APIs Consoleで発行されたClient Secret
- redirect_uri : Google APIs Consoleで発行したRedirect URIs
- grant_type : “authorization_code”
- code : Authorization code値
この際、redirect_uri値はURIエンコードされている必要があります。全体としては以下のようになるでしょう。
curl -d client_id=723478066735.apps.googleusercontent.com -d client_secret=[YOUR Client Secret] -d redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback -d grant_type=authorization_code -d code=[YOUR Authorization code] https://accounts.google.com/o/oauth2/token
この実行結果として、以下のようなJSON形式の文字列が返却されます。
{“access_token”:”アクセストークン値”,”token_type”:”Bearer”,”expires_in”:3600,”refresh_token”:”リフレッシュトークン値”}
access_tokenプロパティの値が、APIにアクセスするためのアクセストークン値となります。
APIアクセス
アクセストークンを得ることができれば、あとは各APIを利用することができます。アクセストークンは、Authorizationリクエストヘッダに指定します。例えば、認可ユーザ自身のユーザ情報を取得するには、以下のようになるでしょう。
curl -H “Authorization: OAuth [YOUR Access token]” https://www.googleapis.com/plus/v1/people/me
この実行結果として、PortableContacts仕様に則ったレスポンスが返却されます。また、認可ユーザの一般公開のフィード一覧を得たい場合は、以下のようにします。
curl -H “Authorization: OAuth [YOUR Access token]” https://www.googleapis.com/plus/v1/people/me/activities/public
この実行結果として、ActivityStreams仕様に則ったレスポンスが返却されます。
アクセストークンの再発行
アクセストークンが失効した場合は、リフレッシュトークンを使ってアクセストークンを再発行します。そのためには、https://accounts.google.com/o/oauth2/token にPOSTメソッドでHTTPリクエストを送ります。その際、以下のパラメータが必要となります。
- client_id : Google APIs Consoleで発行したClient ID
- client_secret : Google APIs Consoleで発行されたClient Secret
- refresh_token : リフレッシュトークン値
- grant_type : “refresh_token”
全体としては以下のようになるでしょう。
curl -d client_id=723478066735.apps.googleusercontent.com -d client_secret=[YOUR Client Secret] -d refresh_token=[YOUR Refresh token] -d grant_type=refresh_token https://accounts.google.com/o/oauth2/token
この実行結果として、アクセストークン取得の時と同じ内容のJSON文字列が返却されます。その中のaccess_tokenプロパティ値が、新しく発行されたアクセストークン値となります。