Authentication NetSuite SuiteTalk令牌身份验证:登录尝试无效
我正在使用Netsuite web服务(SuiteTalk)api,但在使用令牌Passport时,不断出现无效的登录尝试错误。由于令牌身份验证看起来相当复杂,我将包括我所采取的所有步骤 我已从设置>集成>Web服务首选项检索了帐户id 我已设置了一个新角色,未选中所有身份验证框。 在权限>设置中,我添加了以下权限Authentication NetSuite SuiteTalk令牌身份验证:登录尝试无效,authentication,soap,wsdl,netsuite,suitetalk,Authentication,Soap,Wsdl,Netsuite,Suitetalk,我正在使用Netsuite web服务(SuiteTalk)api,但在使用令牌Passport时,不断出现无效的登录尝试错误。由于令牌身份验证看起来相当复杂,我将包括我所采取的所有步骤 我已从设置>集成>Web服务首选项检索了帐户id 我已设置了一个新角色,未选中所有身份验证框。 在权限>设置中,我添加了以下权限 访问令牌管理=完全 用户访问令牌=已满 Web服务=完整 我已将新角色添加到我的用户访问权限中 我已在设置>集成>管理器集成中创建了一个新应用程序 在“身份验证”选项卡下,我选择
- 访问令牌管理=完全
- 用户访问令牌=已满
- Web服务=完整
- 应用程序名称=新应用程序
- 用户=我
- 角色=新角色
- 令牌名称=重命名为有意义的名称
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:msg="urn:messages_2016_2.platform.webservices.netsuite.com"
xmlns:core="urn:core_2016_2.platform.webservices.netsuite.com">
<env:Header>
<msg:tokenPassport>
<core:account>123XXXX_SB1</core:account>
<core:consumerKey>MY_CONSUMER_KEY</cre:consumerKey>
<core:token>MY_TOKEN_ID</core:token>
<core:nonce>ZcVszy7ySJ3Ji8PIgwlW</core:nonce>
<core:timestamp>1530692570</core:timestamp>
<core:signature algorithm="HMAC-SHA256">nN7V4PH9qWNT9BocMQzKcFetqZ3QxpxutDJ8iZjSmH8=</core:signature>
</msg:tokenPassport>
</env:Header>
<env:Body>
<msg:get>
<msg:baseRef xsi:type="core:RecordRef" internalId="1234567" type="customer"/>
</msg:get>
</env:Body>
</env:Envelope>
如果有人能提供任何帮助,我们将不胜感激。您需要添加名为“使用访问令牌登录”的角色权限。我最近遇到了同样的问题 尝试登录Netsuite并检查登录审核特征(确保您使用的是高级搜索,并添加了详细信息列) 因此,在“详细信息”列中,您可以了解登录的真正问题 对我来说,首先是InvalidTimestamp,原因是我对soap请求重用了相同的时间戳 第二个错误是拒绝许可,这一个有点棘手,浪费了我几个小时,最后发现我的大学设置了错误的令牌
希望这能有所帮助。刚刚遇到了一种新的风格,这是一种巨大的时间浪费 情况如下- 在沙盒刷新之后,为用户、角色和集成生成了新的令牌。 请注意,用户、角色和集成已从PROD刷新 无论做了什么,尝试将令牌与SuiteTalk一起使用都会在登录审核跟踪中生成“权限被拒绝”错误 根据NS支持-我添加了一个新角色,一个新的集成&生成了新的令牌,并且仍然收到用户的“权限被拒绝” 解决方案是向每个受影响的用户添加并删除全局权限 一旦我从每个受影响的用户添加和删除了任何全局权限,这个问题就解决了。
我强调“任何”权限(任何全局权限,甚至是与所使用的函数完全无关的全局权限)您在提交SOAP消息时是否收到API的任何响应?是的。soapenv:Server.userException登录尝试无效。用户错误-登录尝试无效。sb-partners-java054.svale.netledger.com我看到您的代码和我自己的代码之间唯一的区别是您使用SHA256,我使用SHA1。这两个都很难支持,所以我不确定问题是什么。谢谢Carl。谢谢你的确认。嘿,你能告诉我你是使用Ruby软件包还是手工创建XML数据吗?我是新手,我正试图弄清楚如何使用soap和tba完成登录。不要像我几个小时前那样忽略这个问题。这恰恰解决了我的问题
class NetSuiteToken
attr_reader :account, :consumer_key, :consumer_secret, :token_id, :token_secret
def initialize(account, consumer_key, consumer_secret, token_id, token_secret)
@account = account.to_s
@consumer_key = consumer_key
@consumer_secret = consumer_secret
@token_id = token_id
@token_secret = token_secret
end
def passport
{
'msg:tokenPassport' => {
'core:account' => account,
'core:consumerKey' => consumer_key,
'core:token' => token_id,
'core:nonce' => nonce,
'core:timestamp' => timestamp,
'core:signature' => signature,
:attributes! => { 'core:signature' => { 'algorithm' => 'HMAC-SHA256' } }
}
}
end
private
def signature
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), signature_key, signature_data))
end
def signature_key
"#{consumer_secret}&#{token_secret}"
end
def signature_data
"#{account}&#{consumer_key}&#{token_id}&#{nonce}&#{timestamp}"
end
def nonce
@nonce ||= Array.new(20) { alphanumerics.sample }.join
end
def alphanumerics
[*'0'..'9',*'A'..'Z',*'a'..'z']
end
def timestamp
@timestamp ||= Time.now.to_i
end
end