[API LINE Messaging] Émettre un jeton d'accès au canal v2.1 en Python

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/

Sujet principal

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)

Comment utiliser

  1. Remplacez l'enfant de l'en-tête par votre clé de signature d'assertion.
  2. Remplacez les "iss" et "sub" de la charge utile par l'ID de votre chaîne.
  3. Pour privateKey, spécifiez le contenu du JSON "privateKey" émis depuis la console LINE Developers.
  4. Exécutez-le pour terminer le JWT.

Tester l'application https://myucy.herokuapp.com/oauth2/v2.1/jwt

Conversion de clé privée addictive point 1

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.

Bibliothèque Jwcrypto Addictive Point 2

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.

Impressions

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.

prime

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

[API LINE Messaging] Émettre un jeton d'accès au canal v2.1 en Python
[API LINE Messaging] Créez un menu riche avec Python
Accéder à l'API Twitter avec Python
Exécutez l'API Google Analytics (core v3) en python
[WP REST API v2] Télécharger des images avec Python
API Evernote en Python
API C en Python 3
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Hit API de Mastodon en Python
Fizzbuzz en Python (en une ligne)
Création d'un BOT «Présentation non officielle du produit remis à neuf par Apple» avec l'API de messagerie LINE (v2) + API Gateway + lambda (python)
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
Essayez LINE Notify avec Python
API Blender Python dans Houdini (Python 3)
Mettez en place le géocodage inversé en japonais avec l'API Python Google Maps
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Démo facile à comprendre de Imagemap Message de l'API de messagerie LINE [PHP] [Ruby] [Python]
[LINE Messaging API] Créez un BOT qui se connecte à quelqu'un avec Python
Émission de jetons d'authentification Firebase en Python et validation de jetons avec Fast API
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
Segfo python en une ligne
Obtenir l'API arXiv en Python
Frappez l'API Sesami en Python
Essayez l'accès au registre PLC en Python
Créez Gmail en Python sans utiliser l'API
Accédez à l'API Web en Python
Implémentez rapidement l'API REST en Python
J'ai essayé la notification de ligne en Python
[Introduction] Insérer des sauts de ligne dans Python 3
Implémenté en 1 minute! LINE Notify en Python
Jeton d'accès à l'API Google et jeton d'actualisation
Fonctionnement de la souris à l'aide de l'API Windows en Python
CGI Server (1) édition python en une ligne
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Graphique à lignes pliées et ligne d'échelle en python
Obtenez les données de l'API Google Fit en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Lisez le fichier ligne par ligne avec Python
Accès exclusif aux fichiers entre les processus en Python
Décomposer les arguments de commande en une seule ligne en Python
Accéder aux ressources S3 via Cognito en Python
[Python] Inversion de valeur booléenne en une ligne
Implémentation du wrapper Python pour l'API Qiita v2
[Python] Lire la ligne spécifiée dans le fichier
Créez un filtre pour obtenir un jeton d'accès avec l'API Graph (Flask)
Exécutez le wrapper Python de l'API Qiita v2 dans un environnement Python 3 (Mac OS X 10.11 (El Capitan))