2017-02-14 20 views
3

Я новичок в токенах bigcommerce и jwt. Я пытаюсь получить имя пользователя api для входа в магазин трейлов. Но они не смогли успешно войти в систему автоматически.Вход для клиентов Bigcommerce api (single sign-on) неверный вопрос входа

Я получил его работать один или два раза, но теперь он больше не работает, и он не может понять странное поведение, так как ничего не изменилось с кодом. Я пробовал googling, если у кого-то еще были проблемы с клиентом login api, но ничего не нашел.

Я прошел через учебник по адресу https://developer.bigcommerce.com/api/v2/#customer-login-api и скопировал приведенный пример. Есть ли что-то, что мне не хватает с кодом ниже?

  • Я пошел в developer.bigcommerce.com и создал черновик приложения.
  • Я получил идентификатор клиента и секрет клиента из черновика приложения.
  • Я зашел в пробный магазин и успешно установил черновик приложения.
  • Я также проверил эту страницу на SSL.
  • Не может быть, потому что это магазин следов, и он будет работать только в том случае, если это настоящий магазин?

Спасибо.

Вот код PHP ниже:

include "vendor/autoload.php"; 

use Bigcommerce\Api\Client as Bigcommerce; 
use Firebase\JWT\JWT; 

function getCustomerLoginToken($id, $redirectUrl = '', $requestIp = '') { 
    /* 
    if (empty(self::$client_secret)) { 
    throw new Exception('Cannot sign customer login tokens without a client secret'); 
    } 
    */ 

    $payload = array(
    'iss' => '#MyApp1's Client ID#', 
    'iat' => time(), 
    'jti' => bin2hex(random_bytes(32)), 
    'operation' => 'customer_login', 
    'store_hash' => '#Store Hash#', 
    'customer_id' => $id 
); 

    if (!empty($redirectUrl)) { 
    $payload['redirect_to'] = $redirectUrl; 
    } 

    if (!empty($requestIp)) { 
    $payload['request_ip'] = $requestIp; 
    } 

    return JWT::encode($payload, "#MyApp1's Client Secret#", "HS256"); 
} 

$jwt = getCustomerLoginToken(1); 

header("Location: " . 'https://store-#Store Hash#.mybigcommerce.com/login/token/' . $jwt); 
exit(); 

ответ

2

Есть несколько ограничений, которые могут вызвать ошибки:

  • приложение должно быть установлено на магазине (кажется, что вы все хорошо здесь - вы также можете протестировать с помощью токена API, созданного локально в магазине - https://support.bigcommerce.com/articles/Public/Store-API-Accounts/)
  • Приложение должно иметь область доступа OAuth
  • URL JWT должен побывать в течение примерно 30 секунд, иначе это не сработает.
  • Компьютер/сервер, генерирующий JWT, должен синхронизировать часы, в противном случае ваше значение IAT будет создано более 30 секунд назад или даже в будущем, которое не удастся.
  • URL-адрес можно посещать ровно один раз - если что-то запускает GET-запрос против него, нежели браузер предполагаемого конечного пользователя, он не будет работать. Например, если вы отправляете URL-адрес в сообщении Slack, slack попытается просмотреть ссылку, посетив ее и, следовательно, аннулировать ее.
  • Это хорошо, чтобы перепроверить, что ваш JWT действует на https://jwt.io/

поддержки BigCommerce имеет доступ к журналам, которые могут пролить свет на ситуацию, если вы исключили выше.

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