【LINE WORKS】API認証情報の取得方法まとめ

> 2022/4/21 API 2.0についての内容を追記

これからLINE WORKS APIを使ってみる貴方のために！
LINE WORKSの記事を書いてくれる人のために！

LINE WORKS API認証情報の取得方法をまとめておきます。
自分で記事書くときもリンク貼ればいいもんね～♪( ´艸｀)

# LINE WORKS APIにはAPI 2.0とAPI 1.0があります

2022/4/1にAPI 2.0がリリースされました。
そのため、現在は2.0と1.0の両方を使用することができます。
認証方式も異なっているので、それぞれの取得方法を参照してください。

# API 2.0で使用する認証情報

- **Client ID**
- **Client Secret**
- **Redirect URL**
- **Service Account**
- **Private Key**

なお、認証方式により使用するものが異なります。
API 2.0では[User Account認証(OAuth)](https://developers.worksmobile.com/jp/reference/authorization-auth?lang=ja)と[Service Account認証(JWT)](https://developers.worksmobile.com/jp/reference/authorization-sa?lang=ja)に分かれています。認証方式の違いについては公式Documentを参考にしてください。

#### User Account認証(OAuth)で使用する認証情報

- **Client ID**
- **Client Secret**
- **Redirect URL**
- User Account(email: xxxx@xxxx)

#### Service Account認証(JWT)で使用する認証情報

- **Client ID**
- **Client Secret**
- **Service Account**
- **Private Key**

では、Developer Consoleにアクセスしてどうやって取得するのか確認してみましょう～♪(*‘∀‘)

## LINE WORKS Developer Console

[LINE WORKS Developer Console](https://developers.worksmobile.com/jp/console/openapi/v2/app/list/view) へアクセスするとログイン画面が表示されるので、LINE WORKSのIDを入力してログインします。

![1605597564.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/c4ae57af-3bc2-c08a-0433-17ec3b00cd7b.png)

初めてLINE WORKS Developer Consoleにログインするときは「LINE WORKS APIサービス利用規約」 が表示されます。
内容を確認して「APIサービス利用規約の内容を理解し、これに同意します。」にチェックを入れ、「利用する」ボタンをクリックします。

![1605598610.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/a40da0ca-4937-38e3-04e6-965cc8b51a22.png)

##### 注意事項

下の画面が出力された場合には、Developer Consoleへのアクセス権限がありません。

![1605598283.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/0461d7db-a39c-f978-346c-243a28df3924.png)

Developer Consoleへアクセスするためには、「最高管理者」もしくは「副管理者」の権限が必要です。
権限の設定については、公式ガイドを参考にしてください。
[LINE WORKSガイド - 管理者権限の管理](https://guide.worksmobile.com/ja/admin/admin-guide/security/administrator-authorities/manage-administrator-authorities/)

## Console 画面

利用開始すると、Developer Consoleが表示されます。

Console画面では左側にメニューが並んでいます。
よく使うのは「**API 2.0**」と「**Bot**」ですかね。

#### Domain IDとTenant IDについて

認証には必要ありませんが、API Requestで使用する場合があるのでついでに少し解説を。

Domain IDとTenant IDは基本的に同じ値で**Unique値**です。
なので、特に違いとか気にしなくて大丈夫です。

Developer Consoleメニュー下部に記載されています。
![1650000437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/867fd571-49e0-e074-8b99-e229d851695a.png)

## アプリについて

API 2.0ではアプリという概念が追加されました。アプリごとに先ほどの認証情報を発行していきます。詳細については[LINE WORKS Developers - アプリ](https://developers.worksmobile.com/jp/reference/client-app?lang=ja)を確認してください。
「アプリの新規追加」
![1650000869.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/c33caaa4-5c25-cac4-de70-a94cd5bfd333.png)

「アプリの新規追加」をクリックするとアプリを作成します。
アプリ名は適当に入力して「同意して利用する」をクリックします。
![1650001177.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/f29839bb-40c6-c995-e8f4-cfb839234caa.png)

アプリが追加されました。この時点でClient IDとClient Secretは発行されてますね。
アプリの説明にこれまた適当な説明を追加したら「保存」をクリックします。
![1650001302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/19dde2e0-d2fd-2343-74a9-2cb1883c9969.png)

画面が切り替わり、すべての認証情報が発行できるようになります。
![1650001433.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/0413be6a-2d66-b61f-16c3-6e1246f3453a.png)

#### Client IDとClient Secret

既に発行されているので「コピー」ボタンでコピーすることができます。
![1650001658.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/8ef11599-77d2-2f46-399b-d376cb9e712d.png)

#### Redirect URL

認証に成功したあとに認証サーバーがAuthorization Codeを送付する際のリダイレクト先のURLです。
Authorization Codeを発行する際のRequest Bodyに含まれるredirect_uriパラメータとアプリに登録したRedirect URLが一致するか検証が行われます。
User Account認証を行う場合、Redirect URLの登録は必須ですが、Service Account認証(JWT)では必要ありません。

> httpsのURLを登録する必要があります。
> サブドメインも個別に登録する必要があります。(例: https://sub.domain).
> 最大100個まで登録可能です。

Redirect URLを設定するには「変更」ボタンをクリックします。
![1650510519.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/e43ed93f-128b-9d7f-f68e-f88d0f0f91eb.png)

アプリ情報画面が表示されるのでRedirect URL欄にURLを入力して「追加」ボタンをクリックします。
最後に「保存」ボタンをクリックすれば設定できます。
![1650510667.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/b2d7134d-939d-323f-9b07-f2beb2afe851.png)

#### Service Account
Service Accountはアプリ専用の仮想管理者アカウントです。
色々便利ですが利用できないAPIもあるのでご注意を。詳細は[公式Document](https://developers.worksmobile.com/jp/reference/authorization-sa?lang=ja)を参照してください。
![1650511109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/51e05e44-81d5-551e-0233-7508b4a4701f.png)

Service Accountを発行すると「コピー」ボタンが出てきます。
また、Private Keyも発行できるようになります。
![1650511391.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/3f810733-916c-76c7-2ab0-ccbf5d16fe2e.png)

#### Private Key
JWT認証をするためのKEYファイル(.key)です。
「発行/再発行」ボタンで取得することができます。
![1650511644.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/53ff9c6c-62ca-1c1e-42f5-4654eafc23b1.png)

中身はこんな感じ。
![1650511523.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/46c34a10-f088-e609-181d-bac538cc9dd3.png)

API 2.0の認証情報は以上ですね。

# API 1.0で使用する認証情報

- **Domain ID**
- **Tenant ID**
- **API ID**
- **Service API Consumer Key**
- **Server API Consumer Key**
- Server List(固定IPタイプ) の **Token**
- Server List(ID登録タイプ) の **Server ID**
- Server List(ID登録タイプ) の **認証キー**

## 似たような名前の認証情報について

詳しくは[公式ドキュメント](https://developers.worksmobile.com/jp/document/1002002?lang=ja)なんだけど、パッと見わかり辛いよね！( ﾟДﾟ)
簡単な特徴だけ説明します。

#### Domain IDとTenant ID

認証には必要ありませんが、API Requestで使用する場合があるのでついでに少し解説を。

Domain IDとTenant IDは基本的に同じ値で**Unique値**です。
なので、特に違いとか気にしなくて大丈夫です。

#### Service API Consumer Key と Server API Consumer Key

LINE WORKS APIはService APIとServer APIの２種類があるのでConsumer Keyも２種類あります。
Service APIはカレンダーとかメール機能と連携するシステム作りたい人向けなので、上級者向けです。
Botを使ってみたい！って人なら**Server API**だけで充分！
**字面が似てる**ので読み間違えないように注意してくださいねｗ

各APIの詳しい違いは[公式ドキュメント](https://developers.worksmobile.com/jp/document/3002001?lang=ja)に書いてあるので興味ある方はこちらを確認してくださいなー。


#### 固定IPタイプとID登録タイプ

Tokenの発行方法の違いです。

固定IPタイプだと、サーバーや自分のPCなどのAPIをRequestする環境の**グローバル IP**をDeveloper Consoleに登録しておけばTokenが発行されます。

ID登録タイプだとToken RequestをしてTokenを取得しないといけないので少々面倒です。
でも、IP固定なんてなかなか無いので**概ねこっちを使います**。
今回はDeveloper Consoleの解説なのでToken Requestの方法は省かせていただききます。
詳しくは[公式ドキュメント](https://developers.worksmobile.com/jp/document/1002002?lang=ja)か[こちらの記事](https://qiita.com/kunihiros/items/a94221ad7c9f4de84cf8#%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%EF%BC%91jwt-%E7%94%9F%E6%88%90)を参考にしてくださいませ。


だいたいOKですかね？
それでは、Developer Consoleにアクセスしてみましょう～♪(*‘∀‘)

## LINE WORKS Developer Console

[LINE WORKS Developer Console](https://developers.worksmobile.com/jp/console/openapi/main) へアクセスするとログイン画面が表示されるので、LINE WORKS の ID を入力してログインします。

![1605597564.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/c4ae57af-3bc2-c08a-0433-17ec3b00cd7b.png)

初めて LINE WORKS Developer Console にログインするときは「LINE WORKS APIサービス利用規約」 が表示されます。
内容を確認して「APIサービス利用規約の内容を理解し、これに同意します。」にチェックを入れ、「利用する」ボタンをクリックします。

![1605598610.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/a40da0ca-4937-38e3-04e6-965cc8b51a22.png)

##### 注意事項

下の画面が出力された場合には、Developer Console へのアクセス権限がありません。

![1605598283.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/0461d7db-a39c-f978-346c-243a28df3924.png)

Developer Console へアクセスするためには、「最高管理者」もしくは「副管理者」の権限が必要です。
権限の設定については、公式ガイドを参考にしてください。
[LINE WORKS ガイド - 管理者権限の管理](https://guide.worksmobile.com/ja/admin/admin-guide/security/administrator-authorities/manage-administrator-authorities/)

## Console 画面

利用開始すると、Developer Console が表示されます。

Console 画面では左側にメニューが並んでいます。
よく使うのは「 **API** 」と「 **Bot** 」ですかね。

今回のお題である API 認証情報は、すべて API の画面で取得できます。
それでは、取得方法を見ていきましょー。(=ﾟωﾟ)ﾉ

#### Domain ID と Tenant ID

Developer Console メニュー下部に記載されています。
![1605582819.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/fa0c9c22-f3c6-a06d-be57-6996e60528a6.png)

#### API ID

左側のメニューの一番上にある「API」メニューから「API ID」の「発行」ボタンをクリックします。

![1605598876.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/51c3a3b2-aa7e-48ef-8ed1-0dc80b986812.png)

**API ID** が発行されます。簡単。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/91a39db3-5ffc-492f-5c55-e95dc845a4f9.png)

#### Service API Consumer Key

Service API Consumer Key はさっきも説明した通り上級者向け API の Consumer Key なので設定が面倒です。(=_=)
「API」メニューの２段目にある「Service API Consumer Key」で発行、取得します。

見てみると「Redirect URLの利用には、Service API Consumer Keyごとに対応するRedirect URLの登録が必要です。」とか書かれています。
初見さんはちんぷんかんぷんですよね。(ﾟДﾟ)

要約すると、セキュリティ強化のために ConsumerKey に登録してある Redirect URL じゃないと Access Token を発行できないよ。ってことです。 
Service API Access Token の発行フローとセットの話なので、何のこっちゃ？の人は取り敢えずスルーしましょう。
初見の人は取り敢えず発行の流れだけでも見てみてください。

Redirect URL を登録しないと発行できないので、「Redirect URL 登録」ボタンを押して登録していきます。

![1605582984.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/7ec8572d-e5d8-3df9-b24e-d183d2c1b56a.png)

Redirect URL 登録画面が表示されます。

例として、以下の記事で登録している Redirect URL を登録します。
登録 URL: `https://contact.worksmobile.com/v2/admin/member/management`
[LINEWORKS の Service API を postman で試す方法](https://qiita.com/kunihiros/items/ce3a3677113426d6b75f)

URL を入力して「登録」ボタンをクリックします。

![1605583244.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/2fca58f0-5e73-7dba-a028-ff36cc69eb73.png)

Redirect URL が登録されたので「保存」ボタンをクリックします。

![1605583273.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/88f63d53-1705-4d84-3194-05c5eea19331.png)

元の画面に戻って、今度は「発行」ボタンをクリックします。

![1605583005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/3d315739-2658-ef0b-6b21-f522fef819f8.png)

Service API Consumer Key 権限設定の画面が表示されます。

サービス API の利用範囲を設定します。
使うやつだけチェック入れてもいいですし、面倒なので全部入れちゃってもいいと思います。
自身のセキュリティポリシーに則って設定してください。

チェックを入れたら「次へ」ボタンをクリックします。 

![1605583328.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/b5d44310-cfda-ce43-939e-26d89657e3b9.png)

Service API Consumer Key 管理の画面が表示されます。

Token の有効期間を設定します。
短いのを推奨されていますが、あまりに短すぎて有効期間が切れても面倒なので私は 90 日くらいにしといています。
Token 使用時の有効期間自動延長は「はい」に設定しておくと便利です。
こちらも、自身のセキュリティポリシーに則って設定してください。

設定が終わったら「保存」ボタンをクリックします。

![1605583399.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/0f70b243-761f-ad9f-ec94-0576653fa940.png)

Service API Consumer Key が発行されました！
Key 欄の値が **Service API Consumer Key** です。

![1605585115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/ed8d688f-ae41-d7ac-b4bb-187a75f44135.png)

ふう。一仕事終えた気分ですね。(*'▽')

#### Server API Consumer Key

こっちはわりと簡単。わかりやすいから安心。(*'▽')

「API」メニューの中ほどにある「Server API Consumer Key」の「発行」ボタンをクリックします。

![1605599971.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/7281e12b-00b7-b9ae-b654-cf90a7192952.png)

Server API Consumer Key 権限設定画面が表示されます。
使うやつだけチェック入れてもいいですし、面倒なので全部入れちゃってもいいと思います。
自身のセキュリティポリシーに則って設定してください。

設定が終わったら「次へ」ボタンをクリックします。

**注）プランによって表示される権限が異なります。**

フリープランではトーク Bot API の権限設定しか出てこなかったりするので、上記画面と違っていても気にせず設定してください。
各プランで使える API は[公式ドキュメント](https://developers.worksmobile.com/jp/document/300130001?lang=ja)に表がありますので気になる方はこちらをご参考ください。

![1605585589.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/9260504f-4743-0d6e-e38c-bcf3fa89ecc0.png)
![1605585574.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/8d37ce9a-20dd-fcb5-d2fe-9a5d80e12130.png)

Server API Consumer Key 管理画面が表示されます。

Token の有効期間を設定します。
短いのを推奨されていますが、あまりに短すぎて有効期間が切れても面倒なので私は 90 日くらいにしといています。
Token 使用時の有効期間自動延長は「はい」に設定しておくと便利です。
こちらも、自身のセキュリティポリシーに則って設定してください。

設定が終わったら「保存」ボタンをクリックします。

![1605585627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/12c66527-61bc-85e5-8eaf-c7bed6bed33a.png)

Server API Consumer Key が発行されました。
Key 欄の値が **Server API Consumer Key** です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/d4df5bee-e9a6-3722-2f12-a22c299304be.png)

#### Server List(固定IPタイプ) の Token

「API」メニューの下の方にある「Server List(固定IPタイプ)」の「追加」ボタンをクリックします。

![1605592212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/df4ae17a-f287-ffc7-1a16-c45a7b6095e8.png)

Server List 画面が表示されます。
以下、すべて設定したら「発行」ボタンをクリックします。

- サーバー名：自分が判別するための名前だから何でも OK
- Key の選択：どの Server API Consumer Key を使うかを選択
- IP：API Request をするサーバの**グローバル IP アドレス**を入力

![1605593098.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/4de1e515-030d-573c-5bd7-9994daac7e72.png)

Token が発行されるので「同意して利用する」ボタンをクリックします。

![1605593213.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/9b704a41-b350-3dcc-8fb1-61232401690b.png)

一覧に **Token** が追加されました！
IP アドレスは「修正」ボタンでいつでも変更できますが、Token は再発行されて前の Token は使えなくなるので注意してください。

![1605593271.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/b5ef4bcc-fecf-66d6-9ed7-e3654feacccd.png)


#### Server List(ID登録タイプ) の Server ID

「API」メニューの一番下にある「Server List(ID登録タイプ)」の「追加」ボタンをクリックします。

![1605599779.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/9300db35-6638-f35f-329a-73c21ac47797.png)



Server List 画面が表示されます。
以下の設定をしたら「保存」ボタンをクリックします。

- サーバー名：自分が判別するための名前だから何でも OK
- Key の選択：どの Server API Consumer Key を使うかを選択

![1605595375.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/4d7bdd54-f087-1248-f1ea-fa5f93cc2fc6.png)


Server List に ID が追加されました。
ID 欄に記載されている値が **Server ID** です。

![1605595795.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/bd82e144-1dbd-9115-5177-8dc67edf3e83.png)

#### Server List(ID登録タイプ) の認証キー

認証キー欄の「ダウンロード」ボタンをクリックします。

![1605596534.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/975bb01c-e955-abfd-e42a-5ef6f3447653.png)

ダウンロードしたファイルをメモ帳などで開きます。
![1604298036.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/0c266c1a-1e91-2627-de1d-d3b0932b8127.png)

開いたファイルに書かれているテキストの `-----BEGIN PRIVATE KEY-----` と `-----END PRIVATE KEY-----` の間に書かれているテキストが認証キーです。
![1604298236.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/f7c670bc-760f-a5d2-38f7-9d7723840198.png)

##### 注意事項

言語や実装環境によっても異なりますが、Javascript でコードに認証キーを記載する場合は、改行せず一行で記載する必要があります。

それから `-----BEGIN PRIVATE KEY-----` の最後と `-----END PRIVATE KEY-----` の始めには改行コードが必要です。

```js:ex)
const PRIVATEKEY = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCUiJDeSdUPnQiZJcXD93wxLLyxZ0～中略～l6kv+c7v0npBw=\n-----END PRIVATE KEY-----";
```

`fs` モジュールとかで `.key` ファイルを直接読み込んだりする場合は違うらしいですが…取扱いにはご注意を。(; ･`д･´)

# おわりに
ここまでお付き合いいただきありがとうございました。

ようやく全部終わった！
これで次から記事書くとき、事前準備関係はリンク貼れば OK だー！ヾ(*´∀｀*)ﾉ

ま、Developer Consoleの仕様が変わったら更新しないとんですけどね。( ﾟДﾟ)

次は何を書こうかな～。
ではまた！(^^)/

# 参考にさせていただきましたm(_ _)m
[LINEWORKS Developers](https://developers.worksmobile.com/jp/document?lang=ja)