使用VBA的基于令牌的身份验证

使用VBA的基于令牌的身份验证,vba,ms-access,oauth,netsuite,Vba,Ms Access,Oauth,Netsuite,我们目前有一个access数据库,正在尝试使用TBA连接到API。下面的代码是我们到目前为止的代码。我们可以只使用用户名和密码进行连接,但无法使TBA代码正常工作。非常感谢您的帮助。我已经仔细检查了字符串 'working code 'reader.Open "GET", "NetSuite API URL, False 'reader.setRequestHeader "Authorization", "NLAuth nlauth_

我们目前有一个access数据库,正在尝试使用TBA连接到API。下面的代码是我们到目前为止的代码。我们可以只使用用户名和密码进行连接,但无法使TBA代码正常工作。非常感谢您的帮助。我已经仔细检查了字符串


'working code
'reader.Open "GET", "NetSuite API URL, False
'reader.setRequestHeader "Authorization", "NLAuth nlauth_account=****,nlauth_email=***, nlauth_signature=****, nlauth_role=***"


reader.Open "GET", "NetSuite API URL", False

Dim RealmStr As String
Dim ConsumKeyStr As String
Dim ConsumSecStr As String
Dim TokenStr As String

RealmStr = "..."
ConsumKeyStr = "..."
ConsumSecStr = "..."
TokenStr = "..."
TokenSecStr = "..."


Application.Run "CreateHeader", RealmStr, ConsumKeyStr, ConsumSecStr, TokenStr, TokenSecStr
XMLReqStr = Chr$(34) & XMLReqStr & Chr$(34)

reader.setRequestHeader "Authorization", XMLReqStr

reader.setRequestHeader "Content-Type", "application/xml"
reader.Send


Do Until reader.ReadyState = 4
    DoEvents
Loop
下面是createheader函数

Public Function CreateHeader(Realm As String, ConsumerKey As String, ConsumerSecret As String, Token As String, TokenSecret As String) As String
    Dim auth_Nonce As String
    Dim auth_Timestamp As String
    Dim auth_Base As String
    Dim auth_SigningKey As String
    Dim auth_Signature As String
    
    ' create nonce and timestamp
    auth_Nonce = CreateNonce()
    auth_Timestamp = VBA.CStr(VBA.DateDiff("s", #1/1/1970#, ConvertToUtc(VBA.Now)))
    
    ' Create needed parts of authorization header
    auth_Base = CreateBaseString(auth_Nonce, auth_Timestamp, ConsumerKey, Token)
    auth_SigningKey = ConsumerSecret & "&" & TokenSecret
    auth_Signature = HMACSHA256(auth_Base, auth_SigningKey, "Base64")
    
    XMLSignStr = auth_SigningKey
    
    ' Generate header
    CreateHeader = "OAuth "
    
    ' Add realm (if exists)
    'If Realm <> "" Then
    '    CreateHeader = CreateHeader & "realm=" & Realm & ", "
    'End If
    
    If Realm <> "" Then
        CreateHeader = CreateHeader & "realm=" & Chr$(34) & Realm & Chr$(34) & ","
    End If
    
      
     CreateHeader = CreateHeader & "oauth_consumer_key=""" & ConsumerKey & ""","
     CreateHeader = CreateHeader & "oauth_token=""" & Token & ""","
     CreateHeader = CreateHeader & "oauth_signature_method=""HMAC-SHA256"","
     CreateHeader = CreateHeader & "oauth_timestamp=""" & auth_Timestamp & ""","
     CreateHeader = CreateHeader & "oauth_nonce=""" & auth_Nonce & ""","
     CreateHeader = CreateHeader & "oauth_version=""" & "1.0" & ""","
     CreateHeader = CreateHeader & "oauth_signature=""" & UrlEncode(auth_Signature) & """"
   
    
    
    CreateHeader = CreateHeader
    XMLReqStr = CreateHeader
    XMLSignStr = UrlEncode(auth_Signature)
    
End Function
Public Function CreateHeader(Realm作为字符串,ConsumerKey作为字符串,consumercret作为字符串,Token作为字符串,TokenSecret作为字符串)作为字符串
作为字符串的Dim auth\u Nonce
Dim auth_时间戳作为字符串
Dim auth_Base作为字符串
Dim auth_将密钥签名为字符串
Dim auth_签名作为字符串
'创建nonce和timestamp
auth_Nonce=CreateNonce()
auth_Timestamp=VBA.CStr(VBA.DateDiff(“s”),1970年1月1日,ConvertToUtc(VBA.Now)))
'创建授权标头所需的部分
auth_Base=CreateBaseString(auth_Nonce、auth_时间戳、ConsumerKey、Token)
auth_SigningKey=ConsumerCret&“&”和TokenSecret
auth_签名=HMACSHA256(auth_Base,auth_SigningKey,“Base64”)
XMLSignStr=auth_签名密钥
'生成标题
CreateHeader=“OAuth”
'添加领域(如果存在)
“如果域为“”,则
'CreateHeader=CreateHeader&'realm=“&realm&',”
"完"
如果域“”那么
CreateHeader=CreateHeader&“realm=“&Chr$(34)&realm&Chr$(34)&”
如果结束
CreateHeader=CreateHeader&“oauth\u consumer\u key=”“”和ConsumerKey&“
CreateHeader=CreateHeader&“oauth_token=”“”&token&“
CreateHeader=CreateHeader&“oauth\u signature\u method=”“HMAC-SHA256”
CreateHeader=CreateHeader&“oauth\u timestamp=”“”&auth\u timestamp&“
CreateHeader=CreateHeader&“oauth\u nonce=”“”&auth\u nonce&“
CreateHeader=CreateHeader和“oauth_version=”“”和“1.0”和“,”
CreateHeader=CreateHeader和“oauth\u签名=”“”以及UrlEncode(auth\u签名)和“”
CreateHeader=CreateHeader
XMLReqStr=CreateHeader
XMLSignStr=UrlEncode(身份验证签名)
端函数

问题可能出在XMLReqStr中。您可以发布CreateHeader子项吗?还有,您遇到了什么错误?我发布了CreateHeader。您需要对请求进行更多签名,下面是另一种语言的示例,但显示了需要签名的内容:看起来我们可能缺少脚本\u ID和脚本\u部署\u ID?问题可能出在您的XMLReqStr中。您可以发布CreateHeader子项吗?还有,您遇到了什么错误?我发布了CreateHeader。您需要对请求进行更多签名,下面是另一种语言的示例,但显示了需要签名的内容:看起来我们可能缺少脚本\u ID和脚本\u部署\u ID?