首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为/使用CURL请求构造、准备和设置JWT授权承载令牌

如何为/使用CURL请求构造、准备和设置JWT授权承载令牌
EN

Stack Overflow用户
提问于 2019-10-27 17:06:20
回答 1查看 2.1K关注 0票数 1

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

代码语言:javascript
运行
复制
$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);

如何设置授权$token,这样我就可以通过phpinfo.php中的全局$_SERVER“授权”变量访问它。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-10-31 09:48:51

服务器不自动设置承载令牌。

开发人员需要创建自定义函数,对承载令牌进行编码和解码。

承载令牌是一种编码敏感数据数组的方法,用于服务器之间的安全传输。

通常与其他软件一起使用,例如用于oAuth跨服务器API功能。

oAuth是一个开放源码框架,允许在服务器之间创建安全通信,而不存在使用密码的持续风险。

承载客户端允许编码用于用户身份验证和/或敏感数据传输的信息数组。

根据您需要使用它的用途,您可能会在网上找到大量的示例、插件和扩展以及,如果它附带了一些3d派对软件,您通常会得到一个完整的文档。

下面的是一个基于Wordpress CMS.的网站使用承载令牌的例子。

1.在Wordpress oAuth,Rest_API &jwt-身份验证wp-rest-api上安装插件的组合,然后用您自己的插件.扩展它们。

您将需要创建自定义令牌生成功能,接收URL点等。然后您将能够安全地发送/接收信息,例如在Chrome / Safari浏览器扩展和Wordpress网站之间。

2.在WordPress网站上接收Url点的示例:

代码语言:javascript
运行
复制
               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,,您将使用它来处理请求并在需要时返回任何数据。*/

代码语言:javascript
运行
复制
                                return processing_function($user_id, $request);
                        }
                 
                    ) );
                ),12);

3. processing_function

代码语言:javascript
运行
复制
         function processing_function($user_id, $request){
              $res = update_user_meta($user_id,'new_creadit_card_number',$request['new_creadit_card_number']);
         }

当然,

  1. 需要一个函数来控制Bearer令牌.有一个名为Bearer...because的无记名令牌包含信息的原因,请看下面的示例:

函数jwt_token($attr=null){ $secret_key =已定义(‘JWT_AUTH_SECRET_KEY’)?JWT_AUTH_SECRET_KEY :假;/**第一件事,检查密钥如果不存在,返回一个错误*/ if (!$secret_key) {返回新的WP_Error( 'jwt_auth_bad_config',__('JWT未正确配置,请联系管理员‘,’wp jwt‘),数组( 'status’=> 403,);} /**尝试使用传递的凭据*/ $user =wp_get_current_user()对用户进行身份验证;如果身份验证失败,则返回错误*/ If (is_wp_error($user)) { $error_code = $ user ->get_error_code();返回新的WP_Error( 'jwt_auth '.$error_code,$ user ->get_error_message($error_code),数组( 'status‘=> 403,) );} /**有效凭证,用户存在创建相应的令牌*/ $issuedAt = time();$notBefore =apply_filters(‘jwt_auth_not_auth’,$issuedAt,$issuedAt);$expire =apply_filters(‘jwt_auth_auth’,$issuedAt + (DAY_IN_SECONDS * 30),$issuedAt);$token =数组( 'iss‘=> get_bloginfo('url')、'iat’=> $issuedAt、'nbf‘=> $notBefore、'exp’=> $expire、'data‘=>数组( 'user’=> $user->data->ID,);需要脏名(__FILE__))。'/jwt-authentication-for-wp-rest-api/includes/vendor/autoload.php';/**允许用户在签名之前修改令牌数据。*/ JWT::encode(apply_filters('jwt_auth_token_before_sign',$token,$user),$secret_key);

/* 注意在下面对令牌进行签名,现在创建带有用户数据的对象到客户端。*/

代码语言:javascript
运行
复制
            $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);
        
    }

请注意:

这不是一个完整的功能、软件,也不是原始问题的完整解决方案。

所有的信息都是为了教育目的而提供的。

I强烈建议使用其他加密方法来保护敏感信息.

当构建一个完整的功能/软件并面对新的问题时,为什么不在下面的评论中将它们链接到一个新的问题中呢?--我将尽我所能在一个新的答案中尽力帮助他们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58581568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档