【问题标题】:Docusing JWT Access Token Request in vb.netvb.net 中的 Docusign JWT 访问令牌请求
【发布时间】:2021-01-11 12:27:06
【问题描述】:

我想为 Docusing 获取 JWT 访问令牌,我尝试使用以下代码获取访问令牌,之后我通过访问令牌创建信封,我得到一个错误

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

Dim PrivateKey As String = "MIIEowIBAAKCAQEAjtTe7UUP/CBI9s...BLABLABLA...JfwZ2hHqFPXA9ecbhc0".Replace(vbLf, "").Replace(vbCr, "")
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_ID")
ar2.Add("sub", "GUID_VERSION_OF_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

我从这个链接DocuSign JWT Access Token Request获取上面的代码,在那个用户提到工作代码中,请告诉我我犯了什么错误, 注意:我获得访问令牌并立即传递该令牌以创建信封。 “iss”是我的集成密钥,“sub”是我的用户 ID 和私钥,我从我的应用程序的 RSA 密钥对形式生成,它是在应用程序和集成密钥中创建的

我正在使用支持 .net framework 4.6.1 的文档 3.0.0 dll

问候, 阿拉文德

【问题讨论】:

    标签: vb.net docusignapi


    【解决方案1】:

    如果您使用的是 DocuSign dll(版本 3.0.0 很旧,我建议您升级 BTW),您不需要所有这些代码。 相反,您可以这样做: (请注意,我假设您有一个包含信息的配置文件,您需要更新此代码以包含 ClientId/IK、UserId、AuthServer 和 RSA 密钥位置)。

    Public Sub UpdateUserFromJWT()
        Me._authToken = _apiClient.RequestJWTUserToken(Me._configuration("DocuSignJWT:ClientId"), Me._configuration("DocuSignJWT:ImpersonatedUserId"), Me._configuration("DocuSignJWT:AuthServer"), DSHelper.ReadFileContent(DSHelper.PrepareFullPrivateKeyFilePath(Me._configuration("DocuSignJWT:PrivateKeyFile"))), 1)
        _account = GetAccountInfo(_authToken)
        Me.User = New User With {
            .Name = _account.AccountName,
            .AccessToken = _authToken.access_token,
            .ExpireIn = DateTime.Now.AddSeconds(_authToken.expires_in.Value),
            .AccountId = _account.AccountId
        }
        Me.Session = New Session With {
            .AccountId = _account.AccountId,
            .AccountName = _account.AccountName,
            .BasePath = _account.BaseUri
        }
    End Sub
    

    【讨论】:

    • 您好,感谢您的回复,我从上面的代码中更改了 vb.net 的代码 .--- Dim authToken As OAuth.OAuthToken = ApiClient.RequestJWTUserToken(My.Settings.ClientID, My.Settings. ImpersonatedUserGuid, My.Settings.AuthServer, bData, 1) AccessToken = authToken.access_token 我收到错误 Ss- prntscr.com/upre3y ,是的,我将所有值都放在配置文件中,然后尝试为私钥传递流和字节,得到相同的结果,并且当传递私钥时需要保留此行 -----BEGIN RSA PRIVATE KEY----- 和 -----END RSA PRIVATE KEY----- 还是不需要?我用的是 4.0.0 版本
    • 需要保留。当您从 DocuSign 复制/粘贴时,需要准确地拥有它
    • 是的,我保留了我从 Docusing 网站复制的私钥,甚至得到“对象引用未设置对象实例”
    • 你在哪一行得到这个异常?
    • 这里我粘贴截图:prntscr.com/upre3y,在这一行我得到异常 Dim authToken As OAuth.OAuthToken = ApiClient.RequestJWTUserToken(My.Settings.ClientID, My.Settings.ImpersonatedUserGuid, My. Settings.AuthServer, bData, 1)
    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 2021-10-24
    • 2021-05-18
    • 2021-02-13
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多