【问题标题】:NetSuite python TBA AuthenticationNetSuite python TBA 身份验证
【发布时间】:2019-01-01 06:15:28
【问题描述】:

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

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

谢谢 T

【问题讨论】:

    标签: python-3.x netsuite suitetalk


    【解决方案1】:

    希望下面的代码对刚开始的人有所帮助。

    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})
    

    【讨论】:

    • 你能解释一下什么是'secret'和'thing_to_has'吗?它们是随机值吗?谢谢,
    • secretToJoin = (consumerSecret, tokenSecret) secret = connectionJoiner.join(secretToJoin) msg​​ToJoin = (nsAccountId, consumerKey, token, nonce, str(currentTime)) connectionJoiner = "&" msgToJoin = connectionJoiner.join( msgToJoin) thing_to_hash = msgToJoin
    • 我需要认真的帮助,请您指导我,因为上面的代码有很多我无法理解的东西
    • 您有什么具体问题需要我帮忙解决吗?
    【解决方案2】:

    我没有深入研究,而是尝试了netsuite,这要好得多。

    【讨论】:

      【解决方案3】:

      这是我生成 TokenPassport 的方式。

          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
              )
      

      【讨论】:

        猜你喜欢
        • 2019-05-01
        • 2021-11-29
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多