ユーザーのOAuth2クライアントを使う
intdash APIではOAuth 2.0(RFC 6749 、以下OAuth2)による認証が可能です。
intdash APIを利用するアプリケーションを開発する場合、OAuth2仕様に沿ってintdashの認可サーバーからアクセストークンを取得するようにしてください。 なお、intdashにおいて認可サーバーとリソースサーバーは同一です。
グラントタイプは、認可コードとクライアントクレデンシャルに対応しています。
重要
本ページ内で使用される用語「クライアント」は、OAuth2の仕様で言うクライアント(client)を指します。
従って、OAuth2の仕組みを使ってアクセストークンを取得しintdash APIにアクセスするアプリケーション(ウェブアプリケーション、モバイルアプリケーション、組み込みアプリケーションなど)がクライアントと呼ばれます。
本ページでは、ユーザーが自分のユーザーアカウントに紐づいたクライアントを設定し、それを使用する方法を説明しています。 1つのユーザーアカウントが複数のクライアントを持つことができます。
1. アクセストークンを取得する
アクセストークンを取得するまでのフローには、以下を利用可能です。
クライアントクレデンシャルによる認可
クライアントIDとクライアントシークレットを使ってアクセストークンをリクエストする方法です。 リソースオーナーとのインタラクションが発生しないアプリケーション(主な例としては、サーバーのバックグラウンドジョブアプリケーション)の場合に、この方法を使用します。
クライアントはあらかじめintdashの認可サーバーに登録しておく必要があります。
クライアントの登録は、上述の 認可コードによる認可 の場合と同じエンドポイント POST /auth/users/me/clients
にて行います。
注釈
現時点では、ウェブコンソールアプリケーション上でクライアントを登録することはできません。APIを使って行う必要があります。
以下は、クライアントを登録するリクエストの例です。
curl -X POST "https://example.intdash.jp/api/auth/users/me/clients" \
-H "Content-Type: application/json" \
-H "Accept: application/json; charset=utf-8" \
-H "X-Intdash-Token: ....." \
--data-raw "{
\"name\": \"my-client-credentials-client\",
\"grant_type\": \"client_credentials\",
\"token_endpoint_auth_method\": \"client_secret_post\"
}"
- X-Intdash-Tokenヘッダー
ユーザーのAPIトークン(My Pageで発行されるもの)を指定してください。
- name
任意の名前を指定してください。
- grant_type
client_credentials
を指定してください。- token_endpoint_auth_method
client_secret_post
を指定してください。 [1]
レスポンス例:
上記のリクエストを行うと、クライアントが作成され、クライアントID(client_id
)、クライアントシークレット(client_secret
)が生成されます。
{
"client_id": "3cdf....",
"client_secret": "2akq....",
"name": "my-client-credentials-client",
"grant_types": [
"client_credentials"
],
"token_endpoint_auth_method": "client_secret_post",
"redirect_uris": [],
"response_types": [],
"scopes": [
// ...
],
"audiences": [],
"tls_client_auth_subject_dn": "",
// ...
}
発行されたクライアントIDとクライアントシークレットを使用してintdashの認可サーバーにアクセストークンをリクエストするには以下のようにします。
$ curl -X POST https://example.intdash.jp/api/auth/oauth2/token \
-d "grant_type=client_credentials&client_id=3cdf....&client_secret=2akq...."
これにより、アクセストークンを含むレスポンスが返ります。
レスポンス例:
{
"access_token": "eyJh....",
"expires_in": 3599,
"scope": ".....",
"token_type": "bearer"
}
アクセストークンを使用する方法については、 2. OAuth2アクセストークンを使用してリソースサーバーにアクセスする を参照してください。
リフレッシュトークンは発行されませんので、有効期限が切れた後はもう一度同じようにアクセストークンをリクエストしてください。
リフレッシュトークンによる新しいアクセストークンの発行
アクセストークンには有効期限があります。 リフレッシュトークンを持っている場合、リフレッシュトークンを使ってアクセストークンを再度要求することができます。
$ curl -X POST https://example.intdash.jp/api/auth/oauth2/token \
-d "grant_type=refresh_token&refresh_token=${REFRESH_TOKEN}&client_id=${CLIENT_ID}"
新しいアクセストークンとリフレッシュトークンを含むレスポンスが返ります。 レスポンスは 認可コードによる認可 の場合と同様です。
2. OAuth2アクセストークンを使用してリソースサーバーにアクセスする
上記の方法で得たOAuth2アクセストークンを使用して、intdashが管理するリソースにアクセスするには、以下のいずれかのようにします。
アクセストークンをAuthorizationヘッダーにセットしてリクエストする。
$ curl -X GET https://example.intdash.jp/api/v1/measurements \ -H "Authorization: Bearer ${ACCESS_TOKEN}"
アクセストークンをCookieにセットした状態でリクエストする。
$ curl -X GET https://example.intdash.jp/api/v1/measurements \ -H "Cookie: _bearer_token=${ACCESS_TOKEN}"