Docusign 访问令牌无效

时间:2021-07-29 17:49:38

标签: jwt

DocuSign eSig API 仍然刚刚开始。在 VB.Net 中编写,但我能够阅读 C# 代码并将其转换为 VB。我不认为这是个问题。我认为我做得对。

情况:

我已确定我正在进行 JWT 授权。

我已经完成了“模仿”范围的“获得授权同意”步骤。

我的 MakeEnvelope() 步骤似乎有效(未发现错误)

我创建 JWT 令牌的函数返回一个令牌,该令牌在 JWT.io 上验证正常(当我给它公钥时)

但是,当我使用 CreateEnvelope() 命令时,出现以下错误:


DocuSign.eSign.Client.ApiException: '调用 CreateEnvelope 时出错:{"errorCode":"AUTHORIZATION_INVALID_TOKEN","message":"提供的访问令牌已过期、撤销或格式错误。"}'

我知道我遗漏了一些基本的东西,但我不想再花时间去弄明白。

这是我获取访问令牌的函数:


Private Function GetaccessToken() As String
    Dim PrivateKey As String = "MIIEowIBAAKCAQEAhwBq<<<etc etc etc >>>JhUfXtJHQv/gvmR5bc"
    Dim ar1 As JObject = New JObject()
    ar1.Add("typ", "JWT")
    ar1.Add("alg", "RS256")
    Dim header As String = Base64UrlEncoder.Encode(ar1.ToString)

    Dim ar2 As JObject = New JObject()
    ar2.Add("iss", "<integration key>")
    ar2.Add("sub", "<user id>")
    ar2.Add("iat", DateDiff(DateInterval.Second, New Date(1970, 1, 1), Now().ToUniversalTime))
    ar2.Add("exp", DateDiff(DateInterval.Second, New Date(1970, 1, 1), DateAdd(DateInterval.Hour, 1, Now().ToUniversalTime)))
    ar2.Add("aud", "account-d.docusign.com")
    ar2.Add("scope", "signature")
    Dim body As String = Base64UrlEncoder.Encode(ar2.ToString)

    Dim stringToSign As String = header & "." & body
    Dim bytesToSign() As Byte = Encoding.UTF8.GetBytes(stringToSign)

    Dim keyBytes() As Byte = Convert.FromBase64String(PrivateKey)
    Dim privKeyObj = Asn1Object.FromByteArray(keyBytes)
    Dim privStruct = RsaPrivateKeyStructure.GetInstance(privKeyObj)

    Dim sig As ISigner = SignerUtilities.GetSigner("SHA256withRSA")
    sig.Init(True, New RsaKeyParameters(True, privStruct.Modulus,
                                privStruct.PrivateExponent))
    sig.BlockUpdate(bytesToSign, 0, bytesToSign.Length)
    Dim signature() As Byte = sig.GenerateSignature()

    Dim sign As String = Base64UrlEncoder.Encode(signature)

    Return header & "." & body & "." & sign
End Function

正如我所说,这会返回一个在 JWT.io 进行验证的令牌。

我创建信封的过程是:


Public Shared Function SendEnvelopeViaEmail(ByVal signerEmail As String,
                                            ByVal signerName As String,
                                            ByVal ccEmail As String,
                                            ByVal ccName As String,
                                            ByVal accessToken As String,
                                            ByVal basePath As String,
                                            ByVal accountId As String,
                                            ByVal docDocx As String,
                                            ByVal docPdf As String,
                                            ByVal envStatus As String) As String
    Dim env As EnvelopeDefinition = MakeEnvelope(signerEmail, signerName, ccEmail, ccName, docDocx, docPdf, envStatus)
    Dim apiClient As ApiClient = New ApiClient(basePath)
    apiClient.Configuration.DefaultHeader.Add("Authorization", "Bearer " & accessToken)
    Dim envelopesApi As EnvelopesApi = New EnvelopesApi(apiClient)
    Dim results As EnvelopeSummary = envelopesApi.CreateEnvelope(accountId, env)
    Return results.EnvelopeId
End Function

使用的基本路径是“https://demo.docusign.net/restapi”

我已经验证了集成 ID、客户 ID、帐户 ID。他们是对的。

错误发生在行
Dim 结果 As EnvelopeSummary = 信封Api.CreateEnvelope(accountId, env)

谁能指出我正确的方向?谢谢!

0 个答案:

没有答案