LINE WORKS の API を試そうと思ったのに、JWT 生成で悩んでしまったという時、この記事を読んでみてください。
取り急ぎ、Web サービスで JWT を生成して、トークンを発行する方法を説明します。運用環境での JWT 生成やトークン発行および管理については、様々な考慮が必要だと思いますので、とりあえずテスト目的での利用を想定した記事です。ご理解くださいませ。
なお、以下の旧 API 対応記事の API 2.0 対応版です。
https://qiita.com/iwaohig/items/5add44b10768eeb7ad6a
Service Accontu 認証 (JWT)
LINE WORKS API 2.0 は、User Account 認証と Service Account 認証が使えます。
Service Account 認証は、旧 API のサーバー API 利用と同様のシナリオで利用しやすい認証方式です。
Service Account 認証では JSON Web Token を利用してアクセス トークンを発行します。ちょっと面倒くさい。
JWT (JSON Web Token) 生成ってなんじゃい、、みたいな。
LINE WORKS Developers サイトのリファレンス ページ
TITLE: Service Account認証 (JWT)
URL: https://developers.worksmobile.com/jp/reference/authorization-sa?lang=ja
JWT.IO
JWT.IO というサービスで、Web ページにパラメータをコピペすることで、アクセス トークン生成に必要な JWT を生成できます。
JWT.IO にアクセスします。
ページ下方にスクロールします。
Decoded の PAYLOAD と VERIFY SIGNATURE を書き換えていきます。
PAYLOAD
{
"iss":<Clinet ID>,
"sub":"<Service Account>",
"iat":<JWT 生成日時 (UNIX TIME)>,
"exp":<JWT 満了日時 (UNIX TIME)>
}
Client ID と Service Account は、LINE WORKS Developer Console のアプリの設定内容をコピーします。
JWT の生成日時と満了日時の間にトークンのリクエストを行う必要があります。UNIX 時間で記述します。最長 60 分有効となるよう指定できます。
UNIX 時間の変換はこのあたりの Web サイトを使いましょう。
VERIFY SIGNATURE
LINE WORKS Developer Console のアプリの "Private Key" で [発行/再発行] ボタンをクリックして "Private Key" をダウンロードします。
ダウンロードしたファイルの内容を -----BEGIN RSA PRIVATE KEY----- の方の入力欄に貼り付けます。
ここまでの作業を行うと、左側の Encoded の欄に、JWT が生成されています。
トークンの発行
生成された JWT を使って、アクセス トークン リクエストを行います。
こちらのページの下方、[Access Token の発行] の記載に沿って実行します。
https://developers.worksmobile.com/jp/reference/authorization-sa?lang=ja
Curl での実行例です。
curl -d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&client_id=<Clinent ID>&client_secret=<Client secret>&scope=<scope>&assertion=<JWT>" -H "Content-Type: application/x-www-form-urlencoded" -X POST https://auth.worksmobile.com/oauth2/v2.0/token
正しくリクエストが実行されると Token の値を含むレスポンスが返ります。
{"access_token":"jp1AAABElAYo/M8P8YV2K+1CBM/NWlxCdYp3A6Bik7Q/yMfAjunHdSV++yS9Wm7hsxQ0Hd3ZN54Iiii3CCcOSYowL/xA42RRq9vCVviGqYQLTXk/WhJbTcH7IwN+RZQCEIuL7Np1YuPuBoh5anYzkSp7u+44aXOaWLU+VlzLpWAe6QLyoNz2Y6vkh2r4i3Yp/tLOZQJLcMimY3/cxt1QbTwgvTshz79kmgPpK4T1u4Waqa6dPVguMSWRBPLDhwwVXTgC/wfstMDtL+uQKoj8rkREbgCe64W5Ietne0xxOe3QWSHJ4z6L5U/6IzC9kFCh+1UrbxqNYguB2OCD9eUpE5fJs10WewXXOzYQ1D+c4MkPvbVwFmJzxf5W7v0GJtNcr11N/reCg==","refresh_token":"jp1AAAAhG8me63qGjzC0rgG3sVIOCIEgxyMrFblr91eTL0+tYuXYHXJMpEO9c9MBh2E3c0rFqZ05iPUzQ5u0tEjD4hJaoBHa2FZ4gizh1EjfRoaI1kMCNYjIOeOB1nVa7TWDQFJyBRdacGJHBavniO35BDu2hbjBktlnRsNp+ZWq8u/FkffXHRtocf7jaoCZgMiHL/4vA==","scope":"bot","token_type":"Bearer","expires_in":"86400"}