Bonjour à tous, utilisez l'API de messagerie.
Jeton d'accès au canal v2.1 émis avec la clé publique libérée l'autre jour La procédure était trop ésotérique pour les débutants Je vais partager la procédure que j'ai essayée en tant que débutant et j'ai pu émettre le jeton d'accès au canal v2.1 avec python.
https://developers.line.biz/ja/news/2020/04/06/channel-access-token-apis-v2-1/
JWT est expliqué en détail sur d'autres sites, donc J'omettrai les détails et n'expliquerai que le code.
La bibliothèque utilisée cette fois est "jwcrypto". https://github.com/latchset/jwcrypto/
pip install jwcrypto
Code réel
from jwcrypto import jwk,jwt
import time
#Date d'expiration du jeton JWT (spécifiée en secondes d'époque jusqu'à 30 minutes)
exp = (int(time.time()))+(60 * 30)
#Date d'expiration du jeton d'accès au canal à émettre (jusqu'à 30 jours, spécifié en secondes)
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 }
#Une clé privée émise par la console LINE Developers."privateKey"Attention car ce n'est que le contenu
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"
}
#Convertir la clé privée de JSON en JWK
privateKey = jwk.JWK(**privateKey)
#Créer un jeton JWT
Token = jwt.JWT(header=header,
claims=payload)
#Signer avec la clé privée créée
Token.make_signed_token(privateKey)
#Sérialiser
JWTtoken = Token.serialize()
#Achevée
print(JWTtoken)
Tester l'application https://myucy.herokuapp.com/oauth2/v2.1/jwt
J'étais accro à cela car j'avais peu de connaissances sur JWT et JWS. À titre d'explication approximative, la clé privée émise par la console LINE Developers est Il semble que vous deviez convertir une fois en JWK car il ne peut pas être utilisé pour la signature JWT car il est au format JSON.
Je vais étudier cela un peu plus et l'ajouter.
Il semble que la bibliothèque jwcrypto regarde strictement le type, et lors de la conversion en JWK ou JWT, Il semble que l'en-tête, la charge utile et la clé privée doivent être de type dict.
Le jeton d'accès au canal v2.1 vous permet de spécifier vous-même la date d'expiration du jeton Par exemple, vous pouvez l'utiliser comme un jeton à usage unique qui n'est valide que pendant 10 minutes au moment de la livraison. Il sera possible de mettre en œuvre de manière plus flexible qu'auparavant.
De plus, le jeton d'accès au canal v2.1 est un jeton d'accès au canal émis par l'API existante, Il semble que la limite d'émission soit comptée séparément.
J'ai créé une application de test simple pour Channel Access Token v2.1.
Jeton d'accès au canal v2.1 émis https://myucy.herokuapp.com/oauth2/v2.1/token
Jeton d'accès au canal v2.1 Obtenir un jeton https://myucy.herokuapp.com/oauth2/v2.1/tokens
Jeton d'accès au canal v2.1 révoqué https://myucy.herokuapp.com/oauth2/v2.1/revoke
application de test de problème jwt https://myucy.herokuapp.com/oauth2/v2.1/jwt
Code source https://github.com/myucy/line-channel-token-v2.1-tester
Recommended Posts