1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

API Lab for LINE WORKSAdvent Calendar 2024

Day 2

LINE WORKS API トークン取得 (User Account 認証)

Last updated at Posted at 2024-12-02

LINE WORKS API 認証フローの実装 (OAuth 2.0)

はじめに

この記事では、LINE WORKS の API を使用するための認証フローを実装する方法を解説します。OAuth 2.0 の Authorization Code Flow を利用して、Access Token を取得します。

Google Colab でスクリプトを共有しているので、以下の URL から簡単に試すことができます!
https://colab.research.google.com/drive/1nLHnrwMJ2eXuNcQRPxvfAdOKyDLTKHMB?usp=sharing

前提条件

  • LINE WORKS Developer Console でアプリを作成済み
  • Client IDClient Secret を取得済み
  • アプリにリダイレクト URL と必要な Scope を設定済み

必要なライブラリ

  • Python の requests ライブラリを使用します。最初にインストールしておきましょう。

手順

以下の手順に沿って進めます。

  1. Google Colab の準備とライブラリのインストール
  2. 認可リクエスト URL の作成
  3. 認証後に取得するリダイレクト URL の入力
  4. Access Token の取得

1. Google Colab の準備とライブラリのインストール

まずは、requests ライブラリをインストールします。Google Colab のセルで以下のコマンドを実行してください。

!pip install requests

2. 認可リクエスト URL の作成

次に、認証リクエスト URL を生成します。この URL をブラウザで開くと、LINE WORKS の認証画面が表示されます。

# 必要な変数を Google Colab のパラメータ形式で入力
CLIENT_ID = "YOUR_CLIENT_ID"  # @param {type:"string"}
CLIENT_SECRET = "YOUR_CLIENT_SECRET"  # @param {type:"string"}
REDIRECT_URI = "https://example.com"  # @param {type:"string"}
SCOPE = "bot"  # @param {type:"string"}
STATE = "random_state_string"  # @param {type:"string"}
NONCE = "random_nonce_string"  # @param {type:"string"}

import urllib.parse

# 認可リクエスト URL を作成
auth_url = "https://auth.worksmobile.com/oauth2/v2.0/authorize"
params = {
    "client_id": CLIENT_ID,
    "redirect_uri": REDIRECT_URI,
    "scope": SCOPE,
    "response_type": "code",
    "state": STATE,
    "nonce": NONCE,
}
auth_request_url = f"{auth_url}?{urllib.parse.urlencode(params)}"

# 認可リクエスト URL を表示
print("以下の URL にアクセスして認証を進めてください:")
print(auth_request_url)

上記コードを実行すると、認証リクエスト URL が表示されます。この URL をブラウザで開き、LINE WORKS のアカウントでログインを行います。

3. 認証後に取得するリダイレクト URL の入力

認証が成功すると、ブラウザは事前に設定したリダイレクト URL に移動し、以下のような形式の URL が表示されます。

https://example.com/?code=AUTHORIZATION_CODE&state=random_state_string

このリダイレクト URL をコピーして、次のセルに入力します。

REDIRECT_URL = "https://example.com/?code=AUTHORIZATION_CODE&state=random_state_string"  # @param {type:"string"}

4. Access Token の取得

リダイレクト URL から認証コード (code) を抽出し、それを使用して Access Token を取得します。

import requests
import urllib.parse

# リダイレクト URL からクエリパラメータを解析
parsed_url = urllib.parse.urlparse(REDIRECT_URL)
query_params = urllib.parse.parse_qs(parsed_url.query)

# Authorization Code を取得
AUTHORIZATION_CODE = query_params.get("code", [None])[0]
if AUTHORIZATION_CODE is None:
    raise ValueError("リダイレクト URL に 'code' パラメータが含まれていません。")

print(f"抽出された認証コード: {AUTHORIZATION_CODE}")

# トークンリクエスト用のエンドポイント
TOKEN_URL = "https://auth.worksmobile.com/oauth2/v2.0/token"

# リクエストパラメータ
data = {
    "code": AUTHORIZATION_CODE,
    "grant_type": "authorization_code",
    "client_id": CLIENT_ID,
    "client_secret": CLIENT_SECRET,
    "redirect_uri": REDIRECT_URI,
}

# POST リクエストを送信して Access Token を取得
response = requests.post(TOKEN_URL, data=data)

# レスポンスを確認
if response.status_code == 200:
    tokens = response.json()
    print("Access Token:", tokens["access_token"])
    print("Refresh Token:", tokens["refresh_token"])
    print("ID Token:", tokens.get("id_token"))
else:
    print(f"エラー: {response.status_code}, {response.text}")

レスポンス例

成功時:

抽出された認証コード: jp1T2FBaVUyd1Z0UFlKNjZvNA==
Access Token: jp1AAAA...
Refresh Token: AAAAUrG...

失敗時:

エラー: 400, {"error":"invalid_request","error_description":"Invalid client_id"}

まとめ

これで、Google Colab を使用して LINE WORKS API の認証フローを実装することができました。この手順により、Access Token を取得して LINE WORKS のさまざまな API を利用できます。

LINE WORKS アカウントによるログインを Selenium で自動化する手法の記事も書きました。こちらも参照してみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?