【OAuth2.0】aurlからBacklog API を使ってみよう

2017.06.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹@上越妙高オフィスです。本日はクラスメソッド内でも利用者の多いツールaurlのご紹介です。

ツールの説明にはこうあります。

aurl is a command-line tool that process OAuth 2.0 dance and manage access/refresh tokens automatically.

OAuth 2.0のアクセストークン取得を裏でやりとりしてくれて、得られたトークンで指定したURL(API)を叩いてくれるツールです。

今回はBacklogが提供しているAPIに aurl でアクセスしてユーザー情報を取得してみたいと思います。

(前準備)API Gateway + Lambda でコールバックURLを用意する

BacklogのOAuth 2.0認可ではAuthorization Code Grantのみ対応しています。認証が完了するとコールバックURLに認可コードを付けてリダイレクトされるため、受け取り用のURLを用意します。

Serverless Frameworkを使ってAPI Gateway + Lambdaでサクッと作ります。

2つのファイルをダウンロードしたらデプロイコマンドでAPI GatewayとLambdaファンクションが作成されます。

$ sls deploy

Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading service .zip file to S3 (301 B)...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..............
Serverless: Stack update finished...
Service Information
service: oauth2cb
stage: prod
region: us-east-1
api keys:
  None
endpoints:
  GET - https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/oauth2/callback
functions:
  callback: oauth2cb-prod-callback

endpointsに出力されたURLは後ほど使うのでメモしておいてください。

環境設定

Backlog CLIENT_ID, CLIENT_SECRETを入手する

Backlogアプリケーション登録画面でアプリケーション(aurl)を登録します。

Redirect URIアプリケーション名を入力してアプリケーションを登録します。CLIENT_IDCLIENT_SECRETが発行されるのでメモしておいてください。

20170614_aurl_backlog_002

aurl プロファイルを作成する

aurlのプロファイルは ~/.aurl/profiles にあるのでエディタで開きます。

今回backlogというプロファイルで作成するので下記を貼り付けてください。

~/.aurl/profiles

[backlog]
auth_server_auth_endpoint = https://YOUR_SPACE.backlog.jp/OAuth2AccessRequest.action
auth_server_token_endpoint = https://YOUR_SPACE.backlog.jp/api/v2/oauth2/token
redirect = https://YOUR_RESTAPI_ID.execute-api.us-east-1.amazonaws.com/prod/oauth2/callback
client_id = YOUR_CLIENT_ID
client_secret = YOUR_CLIENT_SECRET
  • YOUR_SPACE ... お使いのBacklogスペースID
  • YOUR_RESTAPI_ID ... 作成されたAPI GatewayのID(sls deployした際に表示されたendpoint URLを記載してください)
  • YOUR_CLIENT_ID ... Backlogアプリケーション登録画面で取得したCLIENT_ID
  • YOUR_CLIENT_SECRET ... 同 CLIENT_SECRET

動作確認

aurlのプロファイルを指定してBacklogのAPIにアクセスしてみましょう。/api/v2/users/myselfで認証したユーザーの情報を取得してみます。

$ aurl --profile backlog "https://YOUR_SPACE.backlog.jp/api/v2/users/myself" | jq "."
Open browser and get code from https://YOUR_SPACE.backlog.jp/OAuth2AccessRequest.action?client_id=YOUR_CLIENT_ID&redirect_uri=https%3A%2F%2Fexample.com%2Fv1%2Foauth2%2Fcallback&response_type=code&scope=root&state=xxxxxxxxxxxxx

Enter code:

初回実行時はまだアクセストークンがないため、認可コードを取得するためにブラウザが起動します。ブラウザでBacklogにログインすると登録したBacklogアプリケーションにアクセスを許可して良いか確認されますので「許可する」をクリックします。

20170614_aurl_backlog_001

コールバックURLにリダイレクトされます。URLパラメーターに認可コードが付与されてますのでコピーします。

20170614_aurl_backlog_003

aurlのコマンドに戻ります。Enter code:で入力待ちになっているので認可コードを貼り付けて実行します。

あなた自身のユーザー情報が取得できれば成功です!

{
  "id": 1234567890,
  "userId": "ueki",
  "name": "CM植木和樹",
  "roleType": 1,
  "lang": null,
  "mailAddress": "ueki.kazuki@example.com",
  "nulabAccount": {
    "nulabId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "name": "CM植木和樹",
    "uniqueId": "cm_uekikazuki"
  }
}

重要な補足

今回BacklogのCLIENT_SECRETをaurlのプロファイルに記載しましたが、これを多人数で共有すべきではありません!。CLIENT_SECRETはパスワードのようなものなので、信頼がおける場所に保管し漏れてはいけないもののためです。

BacklogにはOAuth 2.0以外にAPI Keyを用いた認証・認可が可能です。API Key方式ではAPIキーがユーザーと紐付いているため、API操作はすべてそのユーザーの権限で行われます。 そのため各ユーザー個別にBacklogのAPIにアクセスする際にはAPI Key方式を採用するのが良いでしょう。

まとめ

aurlを使えばOAuth 2.0認可フレームワークが使えるAPIの利用がお手軽にできます。

今回はBacklogを利用しましたが、aurlのプロファイル設定を各サイトにあわせて修正すればいろいろなサイトで利用することが可能です。 実際のシステムではお好みのプログラミング言語を使って実装していくかと思いますが、APIでどんな情報がとれるのか手軽に確認するときなどに aurl を活用いただけるのではないでしょうか。