2

我正在尝试在 webDNA 中编写一些代码以连接到 google drive api。使用服务帐户似乎是给定问题的最佳解决方案。从我读到的过程是......创建JWT,将JWT发送到谷歌以获取令牌响应,然后将获取的响应发送到调用api方法。我相信我的问题是私钥。

我构建并加密标题:

[text]header={"alg":"RS256","typ":"JWT"}[/text]
[text]header=[encrypt method=Base64][header][/encrypt][/text]
[text]header=[db_base64URL varName=header][/text][!]custom function to deal with special characters[/!]

接下来构建并加密声明(添加空格以提高可读性):

[text]claim={
"iss":"xxx",
"scope":"https://www.googleapis.com/auth/drive",
"aud":"https://www.googleapis.com/oauth2/v4/token",
"exp":[Math][cTime]+3600[/Math],
"iat":[cTime]
}[/text]
[text]claim=[encrypt method=Base64][claim][/encrypt][/text]
[text]claim=[db_base64URL varName=claim][/text]

这些部分似乎是正确的,现在构建签名:

[text]p_key=-----BEGIN PRIVATE KEY-----xxxx-----END PRIVATE KEY-----\n[/text]
[text]sig=[encrypt method=SHA256][header].[claim].[p_key][/encrypt][/text]
[text]sig=[encrypt method=Base64][sig][/encrypt][/text]
[text]sig=[db_base64URL varName=sig][/text]

我尝试将 [p_key] 移动到 sha256 加密之外和内部,有和没有'.',直到我尝试使用 [TCPConnect] 和 [TCPSend] 将它发送到谷歌之前我没有收到错误这里:

[text show=T]response=[!]
[/!][TCPconnect host=accounts.google.com&SSL=T&port=443][!]
[/!][TCPsend skipheader=T]POST /o/oauth2/token HTTP/1.1[crlf][!]
[/!]Host: accounts.google.com[crlf][!]
[/!]Content-Type: application/x-www-form-urlencoded[crlf][!]
[/!]Content-Length: [countchars][sendData][/countChars][crlf][!]
[/!]Connection: close[crlf][!]
[/!][crlf][!]
[/!][sendData][crlf][!]
[/!][/TCPsend][!]
[/!][/TCPconnect][/text]

当显示响应时,它显示为:

{
  "error": "invalid_grant",
  "error_description": "Invalid JWT Signature."
}

此错误消息没有那么有用,从我所读到的内容来看,它可能意味着任何数量的事情中的一个(或多个),而谷歌关于此的文档并不完全有帮助。如果有人有任何通过 webDNA 使用 google api 的经验,我将不胜感激您能提供的任何帮助!

4

0 回答 0