r - 如何用R语言生成JWS

标签 r google-oauth jwt

我尝试为 google-oauth2.0 ServiceAccount 生成 JWT。

我设置了 header 和有效负载(声明)。但是,当我尝试使用 RSASHA256 感叹 base64header.base64claim 时,我得到了不正确的签名。
我在 PKI 包中发现只有一个函数允许使用具有指定散列函数的 RSA 对内容进行签名。

我怎么知道我的签名不正确?我找到了resource可以从输入和私有(private) KEY 生成 JWT。

所以我所看到的,我来自 R 函数的签名与 jwt.io 签名不同。
我已经测试了 https://www.googleapis.com/oauth2/v3/token 的请求使用两个 JWT token ,并且 jwt.io 一个正在工作。

这部分用于 JWT header 。

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 天了。(

最佳答案

终于找到问题的地方了。
它一直是关于 base64 编码的。
我检查了 Correct 和 Inctorrect JWT 并找到了一些模式。
不正确的有"=="在有效负载和签名中,我已将其替换为 "" .
也签名全部"/"我已替换为 "_" ,以及所有 "+""-" .
希望它会给有同样问题的人一个提示。

关于r - 如何用R语言生成JWS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32048714/

相关文章:

c# - 如何在 Asp.net Core 中手动验证 JWT 签名

r - 将数据帧的行转换为向量

R TryCatch 不适用于 lapply

R图质量

java - 在 Web 服务器上代表 Java 中的用户使用 google api

django - 由于某种原因,google oauth2 可以使用不同的 gmail 电子邮件注册同一用户

python - 验证 firebase 身份验证 token 权限被拒绝

python - 如何添加身份验证中间件 JWT django?

r - R如何处理不存在的索引值?

python - 无法找到使用 jwcrypto 在 python 中解密 JWE token (但在 ASP.Net 中创建)的方法