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

PHP Angular - JWT 授权持有者令牌

柴磊
2023-03-14

我正在尝试获取通过角度发送到 php 的授权令牌。我的角度拦截器如下所示

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (localStorage.getItem('token') != null) {
        const clonedReq = req.clone({
            headers: req.headers.set('Authorization', 'Bearer ' + localStorage.getItem('token'))
        });
        return next.handle(clonedReq).pipe(
            tap(
                succ => { },
                err => {
                    if (err.status == 401){
                        localStorage.removeItem('token');
                        localStorage.removeItem('username');
                        this.router.navigateByUrl('/user/login');
                    }
                }
            )
        )
    }
    else {
        return next.handle(req.clone());
    }
}

现在如何在php中获取令牌?我试着遵循这个问题的答案。但这也没用。以下是使用上面答案中的代码时的输出。

共有2个答案

白浩荡
2023-03-14

在位于api文件夹的.htaccess文件中包含以下行:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

这里的完整答案:PHP POST请求中缺少授权头

然后,您可以使用< code > $ _ SERVER[' HTTP _ AUTHORIZATION ']读取您的“不记名”令牌,或者

$requestHeaders = apache_request_headers();
$token = $requestHeaders["Authorization"]; 

您仍然需要从$token中删除“承载者”文本。

if (preg_match('/Bearer\s(\S+)/', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
// alternately '/Bearer\s((.*)\.(.*)\.(.*))/' to separate each JWT string
    $stripped_token =  $matches[1];
}
厉成仁
2023-03-14

嗨,我说西班牙语,但我的情况是一样的,我会告诉你我采取了哪种方式

搜索谷歌,在这里我发现你必须在$_SERVER['HTTP_AUTHORIZATION']中接收JWT,但这至少在我的共享主机上不起作用,我试着玩. htAccess文件,但什么都没有,你可以在这里查看详细信息[Apache 2.4 PHP-FPM和授权标头,你也可以通过JSON格式的角发送JWT到你的php文件,但如果你想通过GET或POST发送数据,我建议你使用HttpClientMoules而不是Http请求,

在PHP中,这是我的测试文件,我在URL中发送了JWT,这不是执行令牌的最佳形式,但在我的情况下有效,我希望它能有所帮助。

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

require_once 'jwt/src/BeforeValidException.php';
require_once 'jwt/src/ExpiredException.php';
require_once 'jwt/src/SignatureInvalidException.php';
require_once 'jwt/src/JWT.php';
use \Firebase\JWT\JWT;

$llave = 'TULLAVESECRETA';

$authHeader = $_GET['tok'];

try{
$decoded = JWT::decode($authHeader, $llave, array('HS256'));
        echo json_encode($decoded);
}
catch(Exception $e){
    http_response_code(200);
    echo json_encode(array(
        "mensaje" => "Vuelve a iniciar sesion.",
        "error" => $e->getMessage()
    ));
}

?>

如果你发表评论,我会编辑

 类似资料:
  • 如何在 Hangfire 中配置持有者令牌授权/身份验证? 我有一个自定义身份验证过滤器,它读取初始请求的身份验证令牌,但它返回401的所有其他请求(Hangfire调用)。 如何将身份令牌附加到HangFire执行的每个请求的标头中? 令牌过期后如何刷新?

  • 我正在尝试与URL(python客户端)建立websocket连接,该URL需要传入jwt令牌,服务器(在GO中实现)在上侦听该请求,并应该通过解析令牌进行身份验证。 我试着用这部分代码来提出请求- 此请求命中运行此代码以验证此请求的服务器 func ParseFromRequest(req*http.Request,keyFunc-keyFunc)(令牌*令牌,错误){ } 每次,我都会得到“E

  • 我注意到惯例是在字段授权下的标题中发送一个JWT。标准是这样发送令牌: 我的问题是为什么我需要把不记名部分为什么不干脆: 当我收到第一个请求时,我需要在验证我的 JWT 时解析每个请求以摆脱持有者。这有什么意义呢?

  • 寻求有关如何进行微服务授权的建议。 我使用spring/spring boot来提供所有的微服务 在使用JWT令牌到达实际微服务之前,我可以通过Spring Cloud网关进行身份验证,但是在授权方面,我不确定如何做到这一点。 我想在内部处理business microservice中每个endpoint的授权。 有没有办法将JWT令牌传递给微服务,或者我需要调用authserver来获取用户中的

  • 我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut

  • 我们正在使用Spring引导作为后端,仅为auth和生成jwt令牌的其余部分在hasura中处理。 我面临正确生成JWT的问题。 这是生成jwt令牌作为 但它hasura返回无效的签名。在哪里作为在节点 jwt从节点 使用相同的密钥和算法工作得非常好。对于节点,我使用了jsonwebtoken库。