NetSuite SuiteTalk 令牌身份验证:无效的登录尝试
NetSuite SuiteTalk Token Authentication : Invalid login attempt
我正在使用 Netsuite Web 服务 (SuiteTalk) api,但在使用 tokenPassport 时不断收到无效登录尝试错误。由于令牌身份验证似乎非常复杂,我将包括我已采取的所有步骤。
我已从“设置”>“集成”>“Web 服务首选项”中检索到帐户 ID
我设置了一个新角色,所有身份验证框都未选中。
在权限 > 设置中,我添加了以下权限
访问令牌管理 = 完全
用户访问令牌 = 完整
Web 服务 = 完整
我已将新角色添加到我的用户访问权限
我在“设置”>“集成”>“管理器集成”中创建了一个新应用程序
在身份验证选项卡下,我选择了基于令牌的身份验证
我在设置 > Users/Roles > 访问令牌中创建了一个新的访问令牌,设置如下
应用程序名称=新应用程序
用户=我
角色 = 新角色
令牌名称 = 重命名为有意义的名称
我的请求xml看起来像
<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>
我正在使用以下 ruby class 生成随机数和签名
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
如果有人能提供任何帮助,我们将不胜感激。
您需要添加名为 "Log in using Access Tokens"
的角色权限
我最近遇到了同样的问题。
尝试登录您的 Netsuite 并检查登录审核特征(确保您使用的是高级搜索,并添加了详细信息列)。
因此,在详细信息栏中,您可以找出登录的真正问题所在。
至于我,首先是 InvalidTimestamp,原因是我为 soap 请求重复使用了相同的时间戳。
第二个错误是permission_denied,这个有点棘手,浪费了我几个小时,最后发现我的大学设置了错误的令牌。
希望这对您有所帮助。
只是 运行 进入了一个新的风格,这是一个巨大的时间浪费。
场景如下——
在 SANDBOX 刷新后,为用户、角色和集成生成了新的令牌。
请注意,用户、角色和集成已从 PROD 刷新。
无论做了什么,尝试将 Token 与 SuiteTalk 一起使用都会在登录审计跟踪中生成 "permission_denied" 错误。
根据 NS 支持 - 我添加了一个新角色、一个新集成并生成了新令牌,但仍然为用户收到 "permission_denied"。
解决方案是添加然后删除每个受影响用户的全局权限。
在我为每个受影响的用户添加和删除任何全局权限后,这个问题就解决了。
我强调“any”Permission(任何全局权限,甚至是与正在使用的功能完全无关的全局权限)
我正在使用 Netsuite Web 服务 (SuiteTalk) api,但在使用 tokenPassport 时不断收到无效登录尝试错误。由于令牌身份验证似乎非常复杂,我将包括我已采取的所有步骤。
我已从“设置”>“集成”>“Web 服务首选项”中检索到帐户 ID
我设置了一个新角色,所有身份验证框都未选中。 在权限 > 设置中,我添加了以下权限
访问令牌管理 = 完全
用户访问令牌 = 完整
Web 服务 = 完整
我已将新角色添加到我的用户访问权限
我在“设置”>“集成”>“管理器集成”中创建了一个新应用程序 在身份验证选项卡下,我选择了基于令牌的身份验证
我在设置 > Users/Roles > 访问令牌中创建了一个新的访问令牌,设置如下
应用程序名称=新应用程序
用户=我
角色 = 新角色
令牌名称 = 重命名为有意义的名称
我的请求xml看起来像
<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>
我正在使用以下 ruby class 生成随机数和签名
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
如果有人能提供任何帮助,我们将不胜感激。
您需要添加名为 "Log in using Access Tokens"
的角色权限我最近遇到了同样的问题。
尝试登录您的 Netsuite 并检查登录审核特征(确保您使用的是高级搜索,并添加了详细信息列)。
因此,在详细信息栏中,您可以找出登录的真正问题所在。
至于我,首先是 InvalidTimestamp,原因是我为 soap 请求重复使用了相同的时间戳。
第二个错误是permission_denied,这个有点棘手,浪费了我几个小时,最后发现我的大学设置了错误的令牌。
希望这对您有所帮助。
只是 运行 进入了一个新的风格,这是一个巨大的时间浪费。
场景如下—— 在 SANDBOX 刷新后,为用户、角色和集成生成了新的令牌。 请注意,用户、角色和集成已从 PROD 刷新。
无论做了什么,尝试将 Token 与 SuiteTalk 一起使用都会在登录审计跟踪中生成 "permission_denied" 错误。
根据 NS 支持 - 我添加了一个新角色、一个新集成并生成了新令牌,但仍然为用户收到 "permission_denied"。
解决方案是添加然后删除每个受影响用户的全局权限。
在我为每个受影响的用户添加和删除任何全局权限后,这个问题就解决了。 我强调“any”Permission(任何全局权限,甚至是与正在使用的功能完全无关的全局权限)