如何为CURL请求构建、准备和设置JWT授权不记名令牌

ogsagwnx  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(169)

为了发送和接收授权持有人,我确实阅读了这个Correct way to set Bearer token with cURL和这个How to properly use Bearer tokens?,下面是我的代码:

$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);

//example token
$token = 'ffaaf96dd9';
$header = array("Authorization: Bearer ". $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$response = curl_exec($ch);
curl_close($ch);
print($response);

如何设置authorization $token,以便我可以通过phpinfo.php中的全局$_SERVER[“Authorization”]变量访问它。
我错过了什么?

ycl3bljg

ycl3bljg1#

不记名令牌不是由服务器自动设置的

开发人员需要创建自定义函数,用于编码和解码不记名令牌。

不记名令牌是一种对敏感数据数组进行编码的方法,用于在服务器之间进行安全传输。

通常与其他软件结合使用,例如,用于oAuth跨服务器API功能。
oAuth是一个开放源代码框架,允许在服务器之间创建安全通信,而不会存在使用密码的持续风险。
承载客户端允许对用于用户身份验证和/或敏感数据传输的信息阵列进行编码。

  • 根据您需要使用它的用途,您可能会在网上找到大量的示例、插件和扩展,如果它附带一些3d方软件,您通常会得到一份完整的文档。*
    以下是基于WordPress CMS的网站使用不记名令牌的示例。
    1.在WordpressoAuth、Rest_API和jwt-authentication-for-wp-rest-api上安装插件组合,然后使用您自己的插件扩展它们。
  • 您将需要创建自定义令牌生成函数,接收URL点等,然后您将能够安全地发送/接收信息,例如在Chrome / Safari浏览器扩展和您的WordPress网站之间。*
    2.示例接收WordPress网站上的URL点:
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']);
         }

1.当然,您需要一个函数来控制***不记名令牌***...不记名令牌之所以被称为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);
        
    }

请注意:

这不是完整的功能、软件,也不是原始问题的完整解决方案。
所有信息仅用于教育目的。

我强烈建议您使用其他加密方法来保护敏感信息。

当建立一个完整的功能/软件,并面临新的问题,为什么不把它们链接在一个新的问题在下面的评论?-我会尽量帮助我可以在一个新的答案。

相关问题