почему авторизация на предъявителя не отправляется? - PullRequest
0 голосов
/ 27 октября 2019

Чтобы отправить и получить носитель авторизации, я прочитал это Правильный способ установки токена Носителя с CURL и Как правильно использовать токены Носителя? и вот мой код:

$url = "http://www.example.com/phpinfo.php";
$data = array('long_url' => 'http://www.google.com');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$header = array('Authorization: Bearer ffaaf96dd9');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$response = curl_exec($ch);
curl_close($ch);
print($response);

Как видите, я отправляю его на свою страницу phpinfo, но не вижу $_SERVER['Authorization'] в своем phpinfo, я нигде не вижу свой токен, что-то не так в моем коде илиЧто еще я должен проверить?

РЕДАКТИРОВАТЬ: URL-адрес example.com фактически установил страницу phpinfo моего сайта.

1 Ответ

0 голосов
/ 31 октября 2019

Маркеры-носители не устанавливаются сервером автоматически

Разработчикам необходимо создавать пользовательские функции, которые кодируют и декодируют маркеры-носители.

Маркер-носитель - это способ кодирования массивов конфиденциальных данных для безопасной передачи между серверами.

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

oAuth - это платформа с открытым исходным кодом, которая позволяет создавать безопасную связь между серверами без постоянного риска использования паролей.

Клиент на предъявителя позволяет кодировать массив информации для аутентификации пользователя и / или для передачи конфиденциальных данных.

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

Ниже приведен пример использования токена на предъявителя дляСайт на базе Wordpress CMS.

1. Установите комбинацию плагинов в Wordpress ** oAuth, Rest_API и jwt-authentication-for-wp-rest-api , а затем дополните их своими собственными плагинами. **

Вам нужно будет создать собственную функцию генерации токенов, получать точки URL и т. Д. Затем вы сможете безопасно отправлять / получать информацию, например, между расширением браузера Chrome / Safari и вашим сайтом Wordpress.

2. Пример получения точки URL на веб-сайте WordPress:

               add_action( 'rest_api_init', function () {
                    //apply_filters( 'determine_current_user', true );
                    register_rest_route( 'humanai/v1', 'data', array(

                        'methods'  => 'POST',
                        'callback' => function($request){ 
                                global $wpdb;
                                $data = $request->get_params();
                                $query = array( 'meta_key' => 'hai-token', 'meta_value' => $data[0]['token'] );
                                $user_id = $wpdb->query('SELECT * FROM '.$wpdb->prefix.'usermeta WHERE meta_key = \'hai-token\' AND meta_value=\''. $data[0]['token'].'\'');

/ * Обратите внимание на processing_function , вы будете использовать ее для обработки запроса и возвраталюбые данные, если требуется. * /

                                return processing_function($user_id, $request);
                        }

                    ) );
                ),12);

3. Функция обработки

         function processing_function($user_id, $request){
              $res = update_user_meta($user_id,'new_creadit_card_number',$request['new_creadit_card_number']);
         }

Конечно, вам нужна функция для управления Жетонами-носителями ... Есть жетон-носитель причины, называемый Bearer ... потому что он несет информацию, пожалуйстапосмотрите на мой пример ниже:

function jwt_token($attr=null){

    $secret_key = defined('JWT_AUTH_SECRET_KEY') ? JWT_AUTH_SECRET_KEY : false;

    /** First thing, check the secret key if not exist return a error*/
    if (!$secret_key) {
        return new WP_Error(
            'jwt_auth_bad_config',
            __('JWT is not configured properly, please contact the admin', 'wp-api-jwt-auth'),
            array(
                'status' => 403,
            )
        );
    }
    /** Try to authenticate the user with the passed credentials*/
    $user = wp_get_current_user();

    /** If the authentication fails return a error*/
    if (is_wp_error($user)) {
        $error_code = $user->get_error_code();
        return new WP_Error(
            '[jwt_auth] '.$error_code,
            $user->get_error_message($error_code),
            array(
                'status' => 403,
            )
        );
    }

    /** Valid credentials, the user exists create the according Token */
    $issuedAt = time();
    $notBefore = apply_filters('jwt_auth_not_before', $issuedAt, $issuedAt);
    $expire = apply_filters('jwt_auth_expire', $issuedAt + (DAY_IN_SECONDS * 30), $issuedAt);

    $token = array(
        'iss' => get_bloginfo('url'),
        'iat' => $issuedAt,
        'nbf' => $notBefore,
        'exp' => $expire,
        'data' => array(
            'user' => array(
                'id' => $user->data->ID,
            ),
        ),
    );

    require dirname(dirname(dirname(__FILE__))) . '/jwt-authentication-for-wp-rest-api/includes/vendor/autoload.php';

        /** Let the user modify the token data before the sign. */
        $token = JWT::encode(apply_filters('jwt_auth_token_before_sign', $token, $user), $secret_key);

/ * Внимание ниже Токен подписан, теперь создайте объект с пользователемДанные для клиента. * /

            $data = array(
                'token' => $token,
                'user_email' => $user->data->user_email,
                'user_nicename' => $user->data->user_nicename,
                'user_display_name' => $user->data->display_name,
                'user_new_credit_card' => 'XXXX XXXX XXXX XXXX'  
            );

            /** Let the user modify the data before send it back */
            return apply_filters('jwt_auth_token_before_dispatch', $data, $user);

    }

Обратите внимание:

Это не полная функциональность, не программное обеспечение и не полное решение исходного вопроса.

Вся информация предоставляется исключительно в образовательных целях.

Я настоятельно рекомендую использовать дополнительные методы шифрования для защиты конфиденциальной информации.

При создании полной функциональности / программного обеспечения и возникновении новых проблем, почему бы не связать их в новом вопросе в комментарии ниже? - Я постараюсь помочь как можно больше в новом ответе.

PS Я трачу много усилий, чтобы создать очень подробные ответы и получить отрицательный голос, не имея шансовсовершенствование не побуждает меня продолжать помогать миллионам людей по всему миру. Если вы находите мой ответ несколько неполным или трудным для понимания, почему бы не задать мне вопрос в комментарии ниже, вместо того, чтобы дать мой ответ отрицательным голосом. Возможно, это будет полезно не только для вас, но и для меня и всего сообщества StackOverflow.

...