[LINE Messaging API] Geben Sie das Kanalzugriffstoken v2.1 in Python aus

Hallo, alle verwenden die Messaging-API.

Channel Access Token v2.1, ausgestellt mit einem öffentlichen Schlüssel, der neulich veröffentlicht wurde Das Verfahren war für Anfänger zu esoterisch Ich werde das Verfahren teilen, das ich als Anfänger versucht habe und das Channel Access Token v2.1 mit Python ausstellen konnte.

https://developers.line.biz/ja/news/2020/04/06/channel-access-token-apis-v2-1/

Hauptthema

JWT wird auf anderen Websites ausführlich erläutert Ich werde die Details weglassen und nur den Code erklären.

Die diesmal verwendete Bibliothek ist "jwcrypto". https://github.com/latchset/jwcrypto/

pip install jwcrypto

Tatsächlicher Code


from jwcrypto import jwk,jwt
import time

#Ablaufdatum des JWT-Tokens (angegeben in Epochensekunden bis zu 30 Minuten)
exp = (int(time.time()))+(60 * 30)

#Ablaufdatum des auszustellenden Kanalzugriffstokens (bis zu 30 Tage, angegeben in Sekunden)
token_exp = 60


header = {"alg": "RS256","typ": "JWT","kid": "1dab2f4f-b73f-47a3-b99d-1730e22b9544"}

payload = { "iss": "1573163733", "sub": "1573163733", "aud": "https://api.line.me/", "exp": exp, "token_exp": token_exp }


#Ein privater Schlüssel, der von der LINE Developers-Konsole ausgegeben wird."privateKey"Seien Sie vorsichtig, denn es ist nur der Inhalt
privateKey = {
    "p": "_mMa1ShoEgeQ0_bo8c1aLa626TQMEu9Ey6ecpgF1Ln_l9jwfPz0JNpJudHF0ZI_Jx6kYp1xNCO4mQpybz-d8N49tcLS9fsQ0IxfVuqJo92vDOT6JLji-l1ssN-Gw052yxtfbLAh21k_HahtEDQyXrASA1LQcFyuxcBpzuzqw6r8",
    "kty": "RSA",
    "q": "0ofg_iiqc-mwy95Jj2hh2YY5GfL-Zz1t9IZ2fUeTl1kNlt9njiW3nkrFP0sQWTXLo7ukyfph6-KhbmBGSgKGCarOFz-HbLpKevEB-zpHfvOYclYmSiBof__PudcTel67VyGH7zPfs5pF3ZZLzJ3pV9dQATgqNpa3EO4g2tFSU6k",
    "d": "rhMe1_FEp1luwTsjvtAwBXxfN4rkJ-Q92r3jHXSDj-yRNA8Drv5xEtEwFOBeJttEdiMeknsGctr3hKOxetxUl8H_XBamfxjzLw8XdZXa-ul60lveMaTrhZ_G8PwygP2AXgNR6_i08kk1QS5cAltpyCzt9kF8S6a67WdVwTvwuB_CR5cTTRGHuvdMt2klrIYZDsDZVD0bqaBmpAPKHyQtCNGgqVHTbzEVydAykbYKoHLK1-e9CViQFIJU_KeNJdTEcWy43HGmbColrbXki1yPIPLydRuSlihoJQ11fikIbaU2gC_79IeSfC5mu4kedTpwEpwOAkviZeV_pJP8YTYKwQ",
    "e": "AQAB",
    "use": "sig",
    "kid": "1dab2f4f-b73f-47a3-b99d-1730e22b9544",
    "qi": "hVkG582RG4xBesEEmCEUBdT-SpysjZ3QPHPDWI8Wm-FnnJs7K5ECmUpSkIbY4yfzBp7OZ9dyeP_iX-1iSyfLEECjDQIdAiGxLL_9ogCbl53IS_ezMRBCox9g0nf9aJ9eH3gxKCYKv3iJ2YwRilH9uNFTmH3wqYZGsvPsyARNjUE",
    "dp": "zSc1u5Qzod6yIQ9uO5uFz3OolZfg6OBH1godng9s5oxE8_j2pjReGsGrDIN2_6aqbzfi5w3cHoiZGH1edyPTnKcx9oP8kqA-_9I4DqTuDCO_NIpHbZxbsIrZtVNxHKiARjZMzk0hMaLzSpIkpnVyWErlbyS1xsX4-lSK4wLpLNc",
    "alg": "RS256",
    "dq": "SJSzyqu2aBPO8doGvjwcT-PoV7vgXTNebwjUXMiKZ4k6GCOZDfaO4TGh4vo7_qV_OUl9vGxnyezt_qGOWgGYuEh8mKM8Sw3Gk6_3IOessmXEztZIiRG3NTm6IbW2b1-tcpKKzLqzirXLFGO2aiqewbvnRyRX2U4Ievu9s_KqUVE",
    "n": "0TRR2UfFrbS6oL-PAN0Mefb4meBlMFFMSkQA9F_sMPk5-HPIohnzkyxsajXU9Q8hwCcnx3xe7nMB5QzHakqyONpiMyRPWFkErP5IxI4dQnnlWnKCuHOoscSIaB6pegm7vWShfLeAqXGV9AlgM-_oboVj0eD0BmYSAjn2sFVC2ZIi0weE2CCcRZCaXMOgPStjj5GnRusntvEh4jkivFd9q21jvBcAd3Lx8irg1M0hxrK_Uy0Larod-1xrfF6NH5dhnGjCVyDSxaWguBhpPC4xS6HXOJbLX67F2NxCS9Qz9B6EmjHLzqwpYCaRoazQs4C4gfHs4XLZLOXHcR2YOxTlFw"
}

#Konvertieren Sie den privaten Schlüssel von JSON in JWK
privateKey = jwk.JWK(**privateKey)

#Erstellen Sie ein JWT-Token
Token = jwt.JWT(header=header,
claims=payload)

#Signieren Sie mit dem erstellten privaten Schlüssel
Token.make_signed_token(privateKey)

#Serialisieren
JWTtoken = Token.serialize()

#Komplett
print(JWTtoken)

Wie benutzt man

  1. Ändern Sie das Kind in der Kopfzeile in Ihren Assertion Signing Key.
  2. Ändern Sie "iss" und "sub" in der Nutzlast in Ihre Kanal-ID.
  3. Geben Sie für privateKey den Inhalt des JSON "privateKey" an, der von der LINE Developers-Konsole ausgegeben wird.
  4. Führen Sie es aus, um die JWT abzuschließen.

Test App https://myucy.herokuapp.com/oauth2/v2.1/jwt

Suchtpunkt 1 Konvertierung des privaten Schlüssels

Ich war süchtig danach, weil ich wenig über JWT und JWS wusste. Als grobe Erklärung gilt der private Schlüssel, der von der LINE Developers-Konsole ausgegeben wird Es scheint, dass Sie einmal in JWK konvertieren müssen, da es nicht für die JWT-Signatur verwendet werden kann, da es im JSON-Format vorliegt.

Ich werde dies etwas genauer untersuchen und hinzufügen.

Süchtig machende Punkt 2 jwcrypto Bibliothek

Es scheint, dass die jwcrypto-Bibliothek den Typ genau betrachtet und bei der Konvertierung in JWK oder JWT Es scheint, dass Header, Payload und PrivateKey vom Typ dict sein müssen.

Impressionen

Mit Channel Access Token v2.1 können Sie das Ablaufdatum des Tokens selbst angeben Sie können es beispielsweise wie ein einmaliges Token verwenden, das zum Zeitpunkt der Lieferung nur 10 Minuten lang gültig ist. Es wird möglich sein, flexibler als zuvor zu implementieren.

Darüber hinaus ist das Kanalzugriffstoken v2.1 ein Kanalzugriffstoken, das von der vorhandenen API ausgegeben wird. Es scheint, dass das Emissionslimit separat gezählt wird.

Bonus

Ich habe eine einfache Test-App für Channel Access Token v2.1 erstellt. Nehmen Sie Kontakt mit mir auf.

Channel Access Token v2.1 ausgestellt https://myucy.herokuapp.com/oauth2/v2.1/token

Kanalzugriffstoken v2.1 Token abrufen https://myucy.herokuapp.com/oauth2/v2.1/tokens

Channel Access Token v2.1 widerrufen https://myucy.herokuapp.com/oauth2/v2.1/revoke

JWT Issue Test App https://myucy.herokuapp.com/oauth2/v2.1/jwt

Quellcode https://github.com/myucy/line-channel-token-v2.1-tester

Recommended Posts

[LINE Messaging API] Geben Sie das Kanalzugriffstoken v2.1 in Python aus
[LINE Messaging API] Erstellen Sie mit Python ein umfangreiches Menü
Greifen Sie mit Python auf die Twitter-API zu
Führen Sie die Google Analytics-API (Core v3) in Python aus
[WP REST API v2] Laden Sie Bilder mit Python hoch
Evernote-API in Python
C-API in Python 3
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
Hit Mastodons API in Python
Fizzbuzz in Python (in einer Zeile)
"Inoffizielle Apple Refurbished Product Introduction" BOT mit LINE Messaging API (v2) + API Gateway + Lambda (Python)
Ich habe versucht, LINE-Bot mit Python + Flask + ngrok + LINE Messaging API zu erstellen
Versuchen Sie LINE Notify mit Python
Blender Python API in Houdini (Python 3)
Stellen Sie die umgekehrte Geokodierung auf Japanisch mit der Python Google Maps-API bereit
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Leicht verständliche Demo von Imagemap Message der LINE Messaging API [PHP] [Ruby] [Python]
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Ausgabe von Firebase-Authentifizierungstoken in Python und Token-Validierung mit Fast API
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
Segfo Python in einer Zeile
Abrufen der arXiv-API in Python
Klicken Sie in Python auf die Sesami-API
Versuchen Sie den Zugriff auf das SPS-Register in Python
Erstellen Sie Google Mail in Python ohne Verwendung der API
Klicken Sie auf die Web-API in Python
Implementieren Sie die REST-API schnell in Python
Ich habe Line Benachrichtigung in Python versucht
[Einführung] Fügen Sie Zeilenumbrüche in Python 3 ein
Implementiert in 1 Minute! LINE Benachrichtigen in Python
Google API-Zugriffstoken und Aktualisierungstoken
Mausbedienung mit Windows-API in Python
CGI Server (1) Python Edition in einer Zeile
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Holen Sie sich Google Fit API-Daten in Python
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Lesen Sie die Datei Zeile für Zeile mit Python
Exklusiver Dateizugriff zwischen Prozessen in Python
Zerlegen Sie Befehlsargumente in einer Zeile in Python
Greifen Sie über Cognito in Python auf S3-Ressourcen zu
[Python] Bool-Wertinversion in einer Zeile
Implementierter Python-Wrapper für Qiita API v2
[Python] Lesen Sie die angegebene Zeile in der Datei
Erstellen Sie einen Filter, um ein Zugriffstoken mit der Graph-API (Flask) zu erhalten.
Führen Sie den Qiita API v2 Python-Wrapper in einer Python 3-Umgebung aus (Mac OS X 10.11 (El Capitan)).