Interface R vers l'API Ghost CMS
P粉134288794
2023-08-03 12:45:37
<p>J'essaie de me connecter à une instance Ghost CMS locale à partir de R à l'aide de l'API d'administration intégrée. Il existe une bonne documentation (https://ghost.org/docs/admin-api/#token-authentication) sur la façon de se connecter dans différentes langues, mais malheureusement il n'y a pas de documentation pour R. J'ai écrit le code suivant mais je reçois malheureusement une erreur 401 lorsque j'essaie de créer un article de test. Toute aide est grandement appréciée. <br /><br />Code R :</p><p><strong></strong></p>
<pre class="brush:php;toolbar:false;">api_admin_key <-
"xxxxxx:aaaayyyyyyyyyyy"
api_admin_key <- unlist(strsplit(x = api_admin_key, split = ":"))
noms(api_admin_key) <- c("id", "secret")
# Préparer l'en-tête et la charge utile
iat <- as.integer(Sys.time())
en-tête <-
liste(alg = 'HS256', typ = 'JWT', kid = api_admin_key[["id"]])
# Créer le jeton (y compris le secret de décodage)
charge utile <-
jose::jwt_claim(iat = iat,
exp = iat + 5 * 60,
aud = '/admin/')
jeton <-
jose::jwt_encode_hmac(
réclamation = charge utile,
secret = charToRaw(api_admin_key[["secret"]]),
taille = 256,
en-tête = en-tête
)
# Faire une demande authentifiée pour créer une publication
url <- 'http://localhost:2368/ghost/api/admin/posts/'
en-têtes <- c('Autorisation' = coller("Ghost", jeton))
corps <- liste(messages = liste(
"titre" = 'Bonjour tout le monde',
"html" = "<p>Contenu de mon message. Travail en cours...</p>",
"statut" = "publié"
)
)
httr::POST(url,
corps = corps,
encoder = "json",
httr::add_headers(.headers = en-têtes))</pre>
<p><br /></p>
On dirait que le problème vient du paramètre secret= que vous transmettez à jwt_encode_hmac(). La fonction charToRaw ne peut pas comprendre les nombres hexadécimaux, elle utilise uniquement les codes de caractères ASCII. Pour effectuer la conversion, vous devez utiliser l'une des fonctions hex_to_raw de la question existante. J'utilise une fonction ici pour effectuer la conversion.
De plus, vous n'avez pas besoin de spécifier alg et de saisir l'en-tête car ceux-ci seront ajoutés automatiquement par la fonction. Vous pouvez donc construire votre token en utilisant :
J'ai testé chaque jeton à l'aide du débogueur sur https://jwt.io/ et ils semblent être équivalents. Dans le débogueur, la valeur codée en Base64 de la valeur hexadécimale « 12bd18f2cd12 » est « Er0Y8s0S ».