LINE Notify 認証API
2023/04 の作業
認証系API
LINE Notify サービス登録で設定、取得した内容を使って、認証を行い、通知を行う為のトークンを取得する。
authorize
・ブラウザ経由でユーザ登録を開始する。( こっち => ブラウザ => LINE )
import uuid
from django.shortcuts import redirect
from django.utils.http import urlencode
・・・・
@staticmethod
def get(request):
# リダイレクトで戻ってくるので、対象者を識別する為に保存しておく
uuid = uuid.uuid4()
line_auth_parameter = {
'response_type': 'code',
'client_id': 'サービス登録で取得したClient ID',
'redirect_uri': 'サービス登録で設定したCallback URL',
'scope': 'notify',
'state': uuid,
}
parameters = urlencode(line_auth_parameter)
access_url = f'https://notify-bot.line.me/oauth/authorize?{parameters}'
return redirect(url)
・ 利用者による認証。( LINE => ブラウザ => LINE )
リダイレクトした端末のLINEアプリが起動して、利用者から通知の認証をする。
1:1や、グループへの関連付けを行う。

token
・コールバックが呼ばれる。( LINE => ブラウザ => こっち )
利用者が[同意して連携する]を選択して、もろもろ正常な場合、レスポンスステータス200で応答される。
import urllib3
import json
・・・・
@staticmethod
def get(request):
# state 取得
state = request.GET.get('state')
# アクセストークン取得用コード
code = request.GET.get('code')
# post の fields はエンコードしてくれる
dict_fields = {
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': 'サービス登録で設定したCallback URL',
'client_id': 'サービス登録で取得したClient ID',
'client_secret': 'サービス登録で取得したClient Secret',
}
http = urllib3.PoolManager()
http_response = http.request(
'POST',
'https://notify-bot.line.me/oauth/token',
fields=dict_fields
)
if 200 != http_response.status:
# エラー
・・・・
# レスポンスデータ
dict_response_data = json.loads(http_response.data.decode('utf-8'))
# 通知用のアクセストークンを対象者に関連付けて保存
access_token = dict_response_data.get('access_token')
・・・・
通知を行う為のアクセストークンの取得はこれでおしまい。