当使用 Rest Api 从 Docusing 生成访问令牌时出现错误

时间:2021-03-30 10:47:01

标签: vb.net docusignapi

我正在使用以下代码获取访问令牌,

       Dim a As String = header & "." & body & "." & sign
       System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
        ServicePointManager.Expect100Continue = True
        Dim request As WebRequest =
      WebRequest.Create("https://account-d.docusign.com/oauth/token?grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=" & a & "")
        request.Method = "POST"

        request.Headers.Add("X-DocuSign-Authentication", "{ ""Username"":""" & odjDTRep.Rows(0)("UserName").ToString() & """,  ""Password"":""" & odjDTRep.Rows(0)("Password").ToString() & """,  ""IntegratorKey"":""" & odjDTRep.Rows(0)("iss_Int_Key").ToString() & """ }")
        Dim response As WebResponse = request.GetResponse() ' Here i get error
        Dim dataStream As Stream = response.GetResponseStream()
        Dim reader As New StreamReader(dataStream)
        Dim responseFromServer As String = reader.ReadToEnd()
        reader.Close()
        response.Close()

错误是“请求被中止:无法创建 SSL/TLS 安全通道。”

1 个答案:

答案 0 :(得分:0)

您混合了不同的授权技术和类型。 我假设您想使用 JWT,因为您将 grant-type:jwt 作为您尝试进行 POST 调用的 URL 的一部分。 要使用 JWT,您确实需要 X-DocuSign-Authentication 标头,而且您当然不需要在代码中输入密码。 您需要 obtain consent 一次,然后您需要构建您的 Javascript Web 令牌,它看起来像这样:

{
  "iss": "5c2b8d7e-xxxx-xxxx-xxxx-cda8a50dd73f",
  "sub": "464f7988-xxxx-xxxx-xxxx-781ee556ab7a",
  "aud": "account-d.docusign.com",
  "iat": 1598383123,
  "exp": 1598390123,
  "scope": "signature impersonation"
}

但是,您还需要有一个 RSA 密钥对,我建议您按照上面链接的 the article 了解如何获取和使用它。

您还可以使用支持 JWT 并且应该能够从 VB.NET 项目中使用的 C# SDK。 这是 VB.NET 代码:

  Sub Main()
    Dim integratorKey As String = "9e1d5046-8888-430d-9b48-xxxxxxx"
    '//Demo Environment
    Dim host As String = "https://demo.docusign.net/restapi"
    Dim userId As String = "dcce8b59-19ec-4273-b283-xxxxxxxx" ' //geoffp.dstest@gmail.com
    Dim scopes As List(Of String) = New List(Of String)
    scopes.Add("signature")
    scopes.Add("impersonation")
    Dim oauthBasePath As String = "account-d.docusign.com"
    Dim RSA_Key_File As String = "C:\Users\geoff.pfander\Box Sync\geoffp\OAuth\DemoPrivate Key.txt"
    Dim privateKeyBytes() As Byte = System.IO.File.ReadAllBytes(RSA_Key_File) ' // Create a Byte array
    Dim expiresInHours As Integer = 1
    Dim accountId As String = String.Empty
    Dim apiClient As DocuSign.eSign.Client.ApiClient = New DocuSign.eSign.Client.ApiClient(host)
    Dim tokenInfo As DocuSign.eSign.Client.Auth.OAuth.OAuthToken = apiClient.RequestJWTUserToken(integratorKey, userId, oauthBasePath, privateKeyBytes, expiresInHours, scopes)
    Console.WriteLine(tokenInfo.access_token)
    Console.ReadLine()
  End Sub