【发布时间】:2015-11-09 23:47:29
【问题描述】:
我尝试为 google-oauth2.0 ServiceAccount 生成 JWT。
我设置了标头和有效负载(声明)。但是,当我尝试使用 RSASHA256 感叹 base64header.base64claim 时,我得到了不正确的签名。 我在 PKI 包中发现只有一个函数允许使用具有指定散列函数的 RSA 对 contet 进行签名。
我是如何发现我的签名不正确的?我发现 resource 可以从输入和私有 KEY 生成 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 坚持了 4 天了。(
【问题讨论】:
标签: r google-oauth jwt