Rumah > Soal Jawab > teks badan
P粉7397060892023-08-04 09:11:43
Nampaknya masalahnya ialah dengan parameter secret= yang anda hantar ke jwt_encode_hmac(). Fungsi charToRaw tidak dapat memahami nombor perenambelasan, ia hanya menggunakan kod aksara ASCII. Untuk melakukan penukaran, anda perlu menggunakan salah satu fungsi hex_to_raw daripada soalan sedia ada. Saya menggunakan fungsi di sini untuk melakukan penukaran.
hex_to_raw <- function(x) { digits <- strtoi(strsplit(x, "")[[1]], base=16L) as.raw(bitwShiftL(digits[c(TRUE, FALSE)],4) + digits[c(FALSE, TRUE)]) }
Selain itu, anda tidak perlu menentukan alg dan taip dalam pengepala kerana ini akan ditambah secara automatik oleh fungsi. Jadi anda boleh membina token anda menggunakan:
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 )
Saya menguji setiap token menggunakan penyahpepijat di https://jwt.io/ dan ia kelihatan setara. Dalam penyahpepijat, nilai dikodkan Base64 bagi nilai perenambelasan "12bd18f2cd12" ialah "Er0Y8s0S".