Auth0 "Строка JWT должна содержать две точки"

В настоящее время я использую Vue3 и интегрировал Auth0-spa-js из https://github.com/auth0/auth0-spa-js. Это прекрасно работает.

Я отправляю запросы на серверную часть PHP API через Axios, передавая токен доступа в качестве параметра GET, называемого token.

На стороне сервера я получаю исключение «Строка JWT должна содержать две точки» после настройки шагов из https://github.com/auth0/auth0-PHP. Я установил требования, guzzle и dotenv и т. д. В настоящее время на PHP 7.4.2.

// useAuth0.js
// to login and maintain Auth state

import createAuth0Client from "@auth0/auth0-spa-js";
import { reactive } from "vue";

export const AuthState = reactive({
  user: null,
  loading: false,
  isAuthenticated: null,
  auth0: null,
});

const config = {
  domain: import.meta.env.VITE_AUTH0_DOMAIN,
  client_id: import.meta.env.VITE_AUTH0_CLIENT_ID,
};

export const useAuth0 = (state) => {
  const handleStateChange = async () => {
    state.isAuthenticated = !!(await state.auth0.isAuthenticated());
    state.user = await state.auth0.getUser();
    state.loading = false;
  };

  const initAuth = () => {
    state.loading = true;
    createAuth0Client({
      domain: config.domain,
      client_id: config.client_id,
      cacheLocation: "localstorage",
      redirect_uri: window.location.origin,
    }).then(async (auth) => {
      state.auth0 = auth;
      await handleStateChange();
    });
  };

  const login = async () => {
    await state.auth0.loginWithPopup();
    await handleStateChange();
  };

  const logout = async () => {
    state.auth0.logout({
      returnTo: window.location.origin,
    });
  };

  return {
    login,
    logout,
    initAuth,
  };
};

// and I use this on a button click event

AuthState.auth0.getTokenSilently().then(accessToken => {
   // AXIOS REQUEST
})
// PHP
// Auth0 SDK is 8.1.0

use Auth0\SDK\Auth0;
use Auth0\SDK\Utility\HttpResponse;
use Auth0\SDK\Token;

$env = (Dotenv\Dotenv::createImmutable(FCPATH))->load();
// I've checked that $env does contain correct .env values

$token = filter_var($_GET['token'] ?? null, FILTER_UNSAFE_RAW, FILTER_NULL_ON_FAILURE);
// Actual token I logged
eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiaXNzIjoiaHR0cHM6Ly9kZXYtd2kxeGRtbDcudXMuYXV0aDAuY29tLyJ9..V50FRJnBnpBnHJjA.e3PZuESoGaPCjp0kO9vlijGMIfhXWQHlbvsslWtbAvFAQ5hef9_PXLD_W282Cba9D6k-FAwhro9i3e5ukzXouGWYfoYHHQ5WQJ-vpLISrRANxFvNVPsCZSkg1sAIbL0Qk3Gir82ds1G919uEPc6vB3Y2qbARAd9nlMJBpLqWUq9VcIrzHtsJN7Q8j36vTCRXyu0f5-TeOr-dU3-gaIUvur37YQD0xICr4sENFktPU3s-uqCSCopVi6MoZMGvfYcVlO3nv1Sb2owGX_S_PSG7fug4Et-pMw1cVYgfNtLQf8XViI-l19sgXAf2eQShmLPvcdBdXVPA0g.S9vyktmK7rPoM_F3nUSEvg

$auth0 = new Auth0([
   'domain' => $env['AUTH0_DOMAIN'],
   'clientId' => $env['AUTH0_CLIENT_ID'],
   'clientSecret' => $env['AUTH0_CLIENT_SECRET'],
   'tokenAlgorithm' => 'RS256'
]);

// Exception thrown here with decode
$token = $auth0->decode($token, null, null, null, null, null, null, Token::TYPE_ID_TOKEN);

$token->verify();

$token->validate();

Есть ли проблема с auth0-spa-js при создании токена, несовместимого с Auth0 PHP SDK, или не передается параметр конфигурации, который мне нужно добавить? Я в значительной степени настроил все, как указано в этих двух документах, дважды проверяя ожидаемые переменные.

Вставьте свой JWT в отладчик JWT, и вы увидите, что он недействителен. Хотя, кажется, частично там. Вы можете использовать такой инструмент, как Fiddler, чтобы определить, совпадает ли это значение с тем, что отправляет внешний интерфейс.

Stephen Cleary 02.04.2022 14:34

Спасибо за отзыв. Да, я тоже проверил это там, и это недействительно. Извините, я не дал понять, но я утешил клиентскую часть токена в getTokenSilently() и подтвердил серверную часть, и они были одинаковыми. Таким образом, кажется, что на стороне клиента библиотека .js не создает действительный токен, но не уверен, почему. Я нашел этот github.com/auth0/auth0-spa-js/issues/880 и подумал, что это может быть связано, но ничего не изменил.

Brian Barton 03.04.2022 17:06

Я также пытался добавить собственный API на панель инструментов Auth0, который использует мой URL-адрес REST API, и использовал идентификатор в качестве параметра аудитории на стороне клиента, но все равно создает недействительный токен.

Brian Barton 04.04.2022 18:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказывается, мне нужно было добавить параметр аудитории в createAuth0Client, getTokenSilently() и метод декодирования PHP SDK для моего пользовательского API Auth0. Все проверено.

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

Другие вопросы по теме