Есть ли способ асимметрично зашифровать токены доступа, созданные с помощью Laravel Passport?

Это сообщение об ошибке запускается, когда отправляется сообщение перед отправкой заголовков HTTP (с помощью setcookie или header ). Общие причины вывода чего-либо перед заголовками HTTP:

  • Случайные пробелы, часто в начале или в конце файлов, например:
     
    

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Чтобы избежать этого, просто оставьте закрытие ?> - это не обязательно. g2] в начале файла php. Изучите ваши php-файлы с помощью шестнадцатеричного редактора, чтобы узнать, так ли это. Они должны начинаться с байтов 3F 3C. Вы можете безопасно удалить спецификацию EF BB BF с начала файлов.

  • Явный вывод, например вызовы echo, printf, readfile, passthru, код до и т. д.
  • Предупреждение, выданное php, если установлено свойство display_errors php.ini. Вместо того, чтобы сбой при ошибке программиста, php молча фиксирует ошибку и выдает предупреждение. Хотя вы можете изменить конфигурации display_errors или error_reporting , вы должны скорее исправить эту проблему. Основными причинами являются доступ к неопределенным элементам массива (например, $_POST['input'] без использования empty или isset , чтобы проверить, установлен ли вход) или используя неопределенная константа вместо строкового литерала (как в $_POST[input], обратите внимание на недостающие кавычки).
  • Включение буферизации вывода должно устранить проблему; все выходные данные после вызова ob_start буферизуются в памяти до тех пор, пока вы не отпустите буфер, например. с ob_end_flush .

    Однако, хотя буферизация вывода исключает проблемы, вы должны действительно определить, почему ваше приложение выводит тело HTTP перед заголовком HTTP. Это будет похоже на телефонный звонок и обсуждение вашего дня и погоды, прежде чем сообщить вызывающему, что у него неправильный номер.

    3
    задан juan_code18 21 February 2019 в 03:24
    поделиться

    1 ответ

    Чтобы решить мою проблему, я использовал библиотеку SimpleJWT для шифрования данных в маркере доступа. Данные зашифрованы в претензиях JWE.

      $headers = ['alg' => 'RSA-OAEP-256', 'enc' => 'A128CBC-HS256'];
      $access_token = {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
      // Creating JWE object with headers and claims
      $jwe = new \SimpleJWT\JWE($headers, $claims);
      $jwe_encrypted = $jwe->encrypt($foreing_server_public_key);
    

    Позже я расшифровал токен, используя библиотеку python JWCrypto . Я подумываю о переходе на Authlib JOSE Guide , потому что оно, кажется, имеет более широкое сообщество и поддержку.

    //Decrypting JWE
    //Private key should be key pair of public key used to encrypt token
    jwetoken.deserialize(jwe_encrypted, key=private_key)
    //Validating Signature since passport signs tokens when generating them
    jwstoken.verify(auth_public_key)
    //Payload should contain encrypted data
    data = json.loads(jwstoken.payload.decode())
    >> {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}
    
    0
    ответ дан juan_code18 21 February 2019 в 03:24
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: