Проверка подлинности токена NetSuite SuiteTalk: неверная попытка входа - PullRequest
0 голосов
/ 04 июля 2018

Я использую API-интерфейс веб-служб Netsuite (SuiteTalk), но получаю сообщение об ошибке «Неправильная попытка входа в систему» ​​при использовании tokenPassport. Поскольку аутентификация токена кажется довольно сложной, я включу все шаги, которые я предпринял.

Я получил идентификатор учетной записи в меню «Настройка»> «Интеграция»> «Настройки веб-службы»

Я установил новую роль со всеми флажками Аутентификации. В разрешениях> Настройка я добавил следующие разрешения

  • Управление токенами доступа = Полный

  • Жетоны доступа пользователя = Полный

  • Веб-сервисы = Полный

Я добавил новую роль в мои права доступа пользователя

Я создал новое приложение в меню «Настройка»> «Интеграция»> «Интеграция с менеджерами». На вкладке Аутентификация я выбрал аутентификацию на основе TOKEN

Я создал новый токен доступа в меню «Настройка»> «Пользователи / роли»> «Токены доступа» со следующими настройками

  • Имя приложения = новое приложение

  • Пользователь = я

  • Роль = новая роль

  • Имя токена = переименовано во что-то, что имеет смысл

Мой запрос 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 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

Если кто-нибудь может предложить какую-либо помощь, она будет очень признательна.

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Я недавно встречался с той же проблемой.

Попробуйте войти в свой Netsuite и проверить признак аудита входа в систему (убедитесь, что вы используете расширенный поиск и добавили столбец сведений).

Итак, в столбце сведений вы можете узнать, в чем истинная проблема с вашим логином.

Что касается меня, то сначала это был InvalidTimestamp, и причина в том, что я повторно использовал ту же метку времени для своих запросов на мыло.

Вторая ошибка - access_denied, эта довольно хитрая, и потратила впустую несколько часов, и, наконец, получается, что мой колледж установил неверный токен.

Надеюсь, это поможет.

0 голосов
/ 03 января 2019

Просто столкнулся с новым вкусом этого, который был гигантской тратой времени.

Сценарий был следующим - После обновления SANDBOX был сгенерирован новый токен для пользователя, роли и интеграции. Обратите внимание, что пользователь, роль и интеграция были обновлены с PROD.

Независимо от того, что было сделано, попытка использовать токен с SuiteTalk вызвала ошибку «mission_denied »в журнале аудита входа.

Для поддержки NS - я добавил новую роль, новую интеграцию и сгенерировал новые токены с этими данными и все еще получил "access_denied" для пользователя.

Решением было добавить и затем удалить глобальное разрешение от каждого затронутого пользователя.

После того, как я добавил и удалил любое глобальное разрешение от каждого затронутого пользователя, эта проблема была решена. Я подчеркиваю «любое» разрешение (любое глобальное разрешение, даже глобальное разрешение, совершенно не связанное с используемыми функциями)

0 голосов
/ 05 июля 2018

Вам необходимо добавить разрешение роли «Вход с использованием токенов доступа»

...