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や、グループへの関連付けを行う。

line_notify_auth
















































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')
        ・・・・



通知を行う為のアクセストークンの取得はこれでおしまい。