当前位置: 首页 > 知识库问答 >
问题:

如何正确使用Bearer代币?

巩光誉
2023-03-14

我正在用 PHP 制作一个授权系统,我遇到了这个传递 JWT 令牌的持有者方案,我阅读了 [RFC 6750][1]。我有以下疑问:

  1. 这是如何提高安全性的
  2. 在成功授权和登录后,服务器在其主体中使用JWT令牌对客户端进行响应,现在当客户端发出另一个请求时,我不清楚该怎么做,我想在请求的authorization头中从客户端发送令牌,所以现在我应该在上一次响应中从服务器收到的令牌前面加上“Bearer”前缀,如果是,那么服务器在接收到Authorization头时,应该只使用空格分割字符串,并从获得的数组中获取第二个值,然后对其进行解码?例如Authorization:Bearer fdbghfbfjhg_sething,服务器应该如何处理这一点,decodeFunc(爆炸(“”,$this-

共有2个答案

卓正业
2023-03-14

我建议使用以下RegEx来检查它是否是有效的jwt令牌:

/Bearer\s((.*)\.(.*)\.(.*))/

并且也用匹配[1]来访问它。

这是JWT-Token的结构,参见:https://jwt.io/

穆宾白
2023-03-14

1.提高安全性,因为如果令牌没有在url中发送的头中发送,它将被网络系统、服务器日志……记录。。。。

2.获取无记名代币的好功能

/** 
 * Get header Authorization
 * */
function getAuthorizationHeader(){
    $headers = null;
    if (isset($_SERVER['Authorization'])) {
        $headers = trim($_SERVER["Authorization"]);
    }
    else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI
        $headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
    } elseif (function_exists('apache_request_headers')) {
        $requestHeaders = apache_request_headers();
        // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
        $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
        //print_r($requestHeaders);
        if (isset($requestHeaders['Authorization'])) {
            $headers = trim($requestHeaders['Authorization']);
        }
    }
    return $headers;
}

/**
 * get access token from header
 * */
function getBearerToken() {
    $headers = getAuthorizationHeader();
    // HEADER: Get the access token from the header
    if (!empty($headers)) {
        if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) {
            return $matches[1];
        }
    }
    return null;
}
 类似资料:
  • 问题内容: 我从API端点获取了承载令牌,并设置了以下内容: 接下来,我想使用CURL访问安全端点,但是不确定如何或在何处设置Bearer令牌。 我已经尝试过了,但是没有用: 编辑: 根据文档,我应该这样使用承载令牌:https : //apigility.org/documentation/auth/authentication- oauth2 问题答案: 更换: 与: 使其成为有效且有效的Au

  • 问题内容: 我只想检索UserAccount类中的某些列,所以我有以下代码: 我得到了空值作为回报。但是,如果我注释掉setProjections,我将获得具有所有属性的用户。在这种情况下,如何正确使用setProjection? 问题答案: 它返回一个Object数组,因此代码应为:

  • 问题内容: 我不知道我在哪里错了:/。当我运行这段代码时,我得到的只是一个空白元素。我似乎无法让insertRule方法执行任何操作(甚至不会产生错误)。我想念什么吗? 问题答案: 这有点令人困惑,但是您的代码确实可以工作,只是您看不到返回的XML树中插入的规则。 为了验证您的代码是否有效,您可以执行两个测试: 运行上面的代码片段,您可以看到CSS规则确实适用。并且属性也在控制台中更改。 当浏览器

  • 问题内容: 如何使用从类路径中查找递归资源? 例如 在“目录”中查找所有资源:想象一下 不幸的是,这只会检索到恰好该“目录”。 所有资源都已命名(递归) 但这返回一个空。 还有一个额外的问题:与有什么不同? 问题答案: 没有办法递归搜索类路径。您需要知道资源的完整路径名才能以这种方式检索它。该资源可能位于文件系统中的目录中,也可能位于jar文件中,因此它不像执行“类路径”的目录列表那样简单。您将需

  • 问题内容: 我最近开始使用ScriptManager。我有一个通过JavaScript填充的ASP.NET DropDownList控件。但是,我正在使用事件验证。因此,如果我不使用下拉菜单中的“ RegisterForEventValidation”调用,则会遇到以下错误。我怎么知道在第二个参数中设置什么值(我有“值”)?我正在通过JavaScript填充下拉列表,因此我不知道后面的代码中包含哪

  • 我正在尝试正确地使用ByteBuffer和BigEndian字节顺序格式。。 我有几个字段,我试图把它存储在Cassandra数据库之前放在一个单一的ByteBuffer中。 我将要写入Cassandra的字节数组由三个字节数组组成,如下所述- 现在,我将写,和一起到一个字节数组和由此产生的字节数组我将写入Cassandra,然后我将有我的C程序来检索它字节数组数据从Cassandra,然后反序列