我正在使用以下代码获取访问令牌,
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 安全通道。”
答案 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