首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NetSuite python TBA身份验证

NetSuite python TBA身份验证
EN

Stack Overflow用户
提问于 2019-01-01 14:15:29
回答 3查看 1.3K关注 0票数 3

在使用SOAP进行NetSuite调用方面,我还是个新手。因此,我可能完全错误地思考了如何解决这个问题。这是我试图解决的问题:-语言: Python+ Zeep -我想将我的应用程序从电子邮件传递转移到基于令牌的身份验证。

在Python中,我能够生成TokenPassport的所有参数。这就是我困惑的地方:我在堆栈上查找了一些代码,并注意到人们正在使用client.service.login()方法登录。此方法接受passport,而不是tokenpassport对象。有没有一个单独的方法接受tokenpassport obj进行登录?或者我需要生成一个带有参数的XML (硬编码),这是作为数据在头中传递的吗?

谢谢T

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-09 21:19:42

希望下面的代码能帮助那些刚起步的人。

代码语言:javascript
复制
base = '&'.join([nsAccountID, consumerKey, token, Nonce, currentTime])
key = '&'.join([consumerSecret, tokenSecret])
digest = hmac.new(str.encode(key), msg=str.encode(base), digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest).decode()

tokenPassport = client.get_type('ns0:TokenPassport')
PassportSignature = client.get_type('ns0:TokenPassportSignature')
tokenPassportSignature = PassportSignature(signature, "HMAC-SHA256" )
clientPass = tokenPassport(account=nsAccountId, consumerKey = consumerKey, token= token, nonce= Nonce, timestamp=currentTime, signature=tokenPassportSignature)


search = client.get_type('ns5:ItemSearchBasic')
searchCriteriaComplex = client.get_type('ns0:SearchStringField')
searchCriteria = searchCriteriaComplex(searchValue= "Test Display Name - tax", operator="is")
searchItem = search(displayName = searchCriteria)
testRes = client.service.search(searchRecord= searchItem, _soapheaders={"tokenPassport": clientPass})
票数 3
EN

Stack Overflow用户

发布于 2019-05-21 05:07:18

我没有对此做更深入的研究,而是尝试了netsuite,它要好得多。

票数 1
EN

Stack Overflow用户

发布于 2019-05-31 06:51:19

下面是我生成TokenPassport的方法。

代码语言:javascript
复制
    def _generateTimestamp(self):
        return str(int(time()))

    def _generateNonce(self, length=20):
        """Generate pseudorandom number
        """
        return ''.join([str(random.randint(0, 9)) for i in range(length)])

    def _getSignatureMessage(self, nonce, timestamp):
        return '&'.join(
            (
                self._setting['ACCOUNT'],
                self._setting['CONSUMER_KEY'],
                self._setting['TOKEN_ID'],
                nonce,
                timestamp,
            )
        )

    def _getSignatureKey(self):
        return '&'.join((self._setting['CONSUMER_SECRET'], self._setting['TOKEN_SECRET']))

    def _getSignatureValue(self, nonce, timestamp):
        key = self._getSignatureKey()
        message = self._getSignatureMessage(nonce, timestamp)
        hashed = hmac.new(
            key=key.encode('utf-8'),
            msg=message.encode('utf-8'),
            digestmod=hashlib.sha256
        ).digest()
        return base64.b64encode(hashed).decode()

    @property
    def tokenPassport(self):
        TokenPassport = self.getDataType("ns0:TokenPassport")
        TokenPassportSignature = self.getDataType("ns0:TokenPassportSignature")

        nonce = self._generateNonce()
        timestamp = self._generateTimestamp()
        tokenPassportSignature = TokenPassportSignature(
            self._getSignatureValue(nonce, timestamp),
            algorithm='HMAC-SHA256'
        )

        return TokenPassport(
            account=self._setting['ACCOUNT'],
            consumerKey=self._setting['CONSUMER_KEY'],
            token=self._setting['TOKEN_ID'],
            nonce=nonce,
            timestamp=timestamp,
            signature=tokenPassportSignature
        )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53993401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档