Heim > Fragen und Antworten > Hauptteil
P粉7397060892023-08-04 09:11:43
看起来问题出在你传递给jwt_encode_hmac()的secret=参数上。charToRaw函数无法理解十六进制数字,它只使用ASCII字符码。要进行转换,你需要使用现有问题中的其中一个hex_to_raw函数。我在这里使用一个函数来进行转换。
hex_to_raw <- function(x) { digits <- strtoi(strsplit(x, "")[[1]], base=16L) as.raw(bitwShiftL(digits[c(TRUE, FALSE)],4) + digits[c(FALSE, TRUE)]) }
另外,你不需要在头部指定alg和typ,因为这些会由函数自动添加。所以你可以使用以下方式构建你的令牌:
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 )
我使用https://jwt.io/上的调试器测试了每个令牌,它们似乎是等价的。在调试器中,十六进制值"12bd18f2cd12"的Base64编码值是"Er0Y8s0S"。