我尝试为Google-oauth2.0 ServiceAccount生成JWT。我设置了头部和有效负载(claim)。但是当我尝试使用RSASHA256签署base64header.base64claim时,我得到了错误的签名。我在PKI包中只找到了一个函数,它允许使用指定的哈希函数用RSA签署内容。
我如何确定我的签名不正确?我发现resource可以从输入和私钥生成JWT。
所以我能看到的是,我的R函数生成的签名与jwt.io的签名不同。我已经使用两个JWT令牌测试了https://www.googleapis.com/oauth2/v3/token的请求,并且jwt.io的那个可以正常工作。
这部分是JWT头。
请问有什么需要帮助的吗? 我已经卡在JWS上四天了。
我如何确定我的签名不正确?我发现resource可以从输入和私钥生成JWT。
所以我能看到的是,我的R函数生成的签名与jwt.io的签名不同。我已经使用两个JWT令牌测试了https://www.googleapis.com/oauth2/v3/token的请求,并且jwt.io的那个可以正常工作。
这部分是JWT头。
library(base64enc)
library(jsonlite)
library(PKI)
#JWT header set up
alg <- "RS256"
typ <- "JWT"
header <- list("alg" = alg, "typ" = typ)
h <- toJSON(header, auto_unbox=TRUE)
enc.header <- base64encode(charToRaw(h))
这部分是用于JWT声明(负载)的
iss <- "165724828594-mkuchqogmjapbl7mpfn0e7f7o3qlrqsr@developer.gserviceaccount.com"
scope <- "https://www.googleapis.com/auth/analytics.readonly"
aud <- "https://www.googleapis.com/oauth2/v3/token"
iat <- as.integer(as.POSIXct(Sys.time()))
exp <- iat+3600
claim <- list("iss" = iss, "scope" = scope, "aud" = aud, "exp" = exp, "iat" = iat)
cl <- toJSON(claim, auto_unbox=TRUE)
enc.claim <- base64encode(charToRaw(cl))
这是我的问题。
y <- file("~/keys/euroset-test-70c2d0d4eed1.pem")
key <- PKI.load.key(y)
what <- paste(enc.header,enc.claim, sep=".")
JWS <- PKI.sign(what, key, "SHA256")
enc.sign <- base64encode(JWS)
JWT <- paste(what,enc.sign, sep=".")
JWT
请问有什么需要帮助的吗? 我已经卡在JWS上四天了。
out <- chartr('+ /','- _',base64enc :: base64encode(x)) gsub('= + $','',out)
这部分告诉我,我的答案是正确的,JWT不正确是因为+
,/
,=
。 - Roman Gribov