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/
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)
Test App https://myucy.herokuapp.com/oauth2/v2.1/jwt
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.
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.
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.
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