Maison > Questions et réponses > le corps du texte
P粉7397060892023-08-04 09:11:43
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.
hex_to_raw <- function(x) { digits <- strtoi(strsplit(x, "")[[1]], base=16L) as.raw(bitwShiftL(digits[c(TRUE, FALSE)],4) + digits[c(FALSE, TRUE)]) }
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 :
api_admin_key <- "adam:12bd18f2cd12" api_admin_key <- unlist(strsplit(x = api_admin_key, split = ":")) names(api_admin_key) <- c("id", "secret") # Prepare header and payload iat <- as.integer(Sys.time()) header <- list(kid = api_admin_key[["id"]]) # Create the token (including decoding secret) payload <- jose::jwt_claim(iat = iat, exp = iat + 5 * 60, aud = '/admin/') token <- jose::jwt_encode_hmac( claim = payload, secret = hex_to_raw(api_admin_key[["secret"]]), size = 256, header = header )
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 ».