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

Laravel 5.3 Passport API未经邮递员使用个人访问令牌验证

储思聪
2023-03-14

我已经设置Laravel使用护照按留档在这里:https://laravel.com/docs/5.3/passport

有几个人问过关于使用oAuth实现的问题,但我尝试使用个人访问令牌,而不是oAuth。一个建议是删除auth中间件,但显然这会使应用程序完全开放,因此任何人都可以发出请求。

我有以下路线(在路线/api.php):

Route::get('/test', function(){
    return 'returned string from test route';
})->middleware('auth:api');

如果我删除了auth中间件以使路由正常工作,则此操作有效,但当再次启用auth中间件时,我在postman中遇到以下错误:

{"error":"Unauthenticated."}

这些是通过邮递员发送的标题:

GET /api/test HTTP/1.1
Host: localhost:8000
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImU4ZmY5MDMwY2EyM2E2MDYwODViN2Y3ZWNiMzcxNDY1MzQxNDViNTk4ODU4NmZhNDljYzU2YjMzYWZiNzhkYTk5OTIwZWMzYzEwNTBkNjZjIn0.eyJhdWQiOiIyIiwianRpIjoiZThmZjkwMzBjYTIzYTYwNjA4NWI3ZjdlY2IzNzE0NjUzNDE0NWI1OTg4NTg2ZmE0OWNjNTZiMzNhZmI3OGRhOTk5MjBlYzNjMTA1MGQ2NmMiLCJpYXQiOjE0NzU1MDMxNjUsIm5iZiI6MTQ3NTUwMzE2NSwiZXhwIjowLCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.IpzKK29dJCpliUXQvPRss87kGFngFcXXwV3jRwhbZOZLxl-4UV70cBsSigmqUuBsHQ4onVl_Cjcq6cEmMFvTZZr7D9AtY3EmScvMPjoFh4KQ3wgd5CoyWfcLQgoBxbElNxL0xW2fIQhpeQd_8Yz_Pr5BByGVTpxfg4JJZ4PzovvZsa2R3izYtqw6-qeurQOtsfOnot5uoLDeDDc76klifnfHfOcNZSoIFGNP3gIGKYBe6lfFuDViR_mQkwQS5_UmERt3GSkEvJjGMtwcRjWY7VPAJ4tvWLnyLw0roGU2e37L0wsqfJ8OrG0Cipv-anXAW_utSo-fiVMr8ZeAWIPguq73Zd44x95YY3nNPOKD5dVIRZM7rQgdhjIwTEz1ggtSXLp-Fu3QOtXaHUahCHvjOTdiTYEa-GR4TZ5wGzt-aRhjdBB7WTe0C6T9ZWVwQr0kJk8AxW6ne87wwJYp_shGunTclZ3SCq5VYg2K_MclbJl65-dT8x-nwqg0lqfNx9s1wmtryrMFIPoBEyaGNEK1aWGHKq418-BIQ1_UAhcHHtEXclWvsGWwhyo3aso-E-sCN2o_IkYvSboIsdFAIXvDvQmoAwis6f1J57zWH8AW1ynCFcBgzBDjIyiaCE5nqtb_4zbEXr8L1EbcllbtZkq3vd9w996kO7xlpBEWwPY8IWg
Accept: application/json
Cache-Control: no-cache
Postman-Token: 6bc483b2-23df-acce-7eef-5a443f8f5d45

共有3个答案

羊越
2023-03-14

请检查代币是否被正确复制,我在复制个人代币时总是观察到,最后还有一个单词“Close”也被复制<代码>EYJ0Exaiioijkv1QILCHbGcIjU2IjU2IjU2IjU2IjU2ImZmZNy1MZQNdVintK4OdU4NmZHndLjU2YJmZyWZyZhKYTk5OtiwZmZwZyWnTbZjin0。Eyjhdwqioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii。2.在中国的一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,在一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市,一个城市一个城市,一个城市,一个城市,一个城市,一个城市,一个_utSo-fiVMr8ZeAWIPguq73Zd44x5年来,我在一次研究中发现了一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个概念,一个新的概念,一个新的概念,一个新的概念,一个概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,一个新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念,新的概念7XLPBEWPY8IWG副本

如果这不是您的案例,请检查该令牌是否存在,或者生成一个新令牌。您可以使用此格式像这样保护路由

Route::middleware('auth:api')->get('/home', function(){
    return 'test';
});
尉迟宇定
2023-03-14

passport.php有两个功能

public static function tokensExpireIn(DateTimeInterface $date = null)
{
    if (is_null($date)) {
        return static::$tokensExpireAt
                        ? Carbon::now()->diff(static::$tokensExpireAt)
                        : new DateInterval('P100Y');
    } else {
        static::$tokensExpireAt = $date;
    }

    return new static;
}

/**
 * Get or set when refresh tokens expire.
 *
 * @param  \DateTimeInterface|null  $date
 * @return \DateInterval|static
 */
public static function refreshTokensExpireIn(DateTimeInterface $date = null)
{
    if (is_null($date)) {
        return static::$refreshTokensExpireAt
                        ? Carbon::now()->diff(static::$refreshTokensExpireAt)
                        : new DateInterval('P100Y');
    } else {
        static::$refreshTokensExpireAt = $date;
    }

    return new static;
}

您必须将P100Y更改为P1Y。还有PassportserviceProvider。php第101行有代码

 $server->enableGrantType(
                new PersonalAccessGrant, new DateInterval('P100Y')
            );

将P100Y更改为P1Y。希望它能帮助你:)

卫念
2023-03-14

>

JWT上的过期时间可能已经设置为在生成后立即过期。这里有一个链接,您可以用来检查访问令牌的“ttl”(生存时间)字段:

https://jwt.io/

如果您发现您的令牌在创建时过期,您可以转到您的应用\提供商\AuthServiceProvider.php类,并在使用Passport Class时添加以下方法:

use Carbon\Carbon;
use Laravel\Passport\Passport;
...

Class AuthServiceProvider extends ServiceProvider {
    ...
    ...

    public function boot() {
        $this->registerPolicies();
        Passport::routes();
        Passport::tokensExpireIn(Carbon::now()->addYears(20));//You can also use addDays(10)
        Passport::refreshTokensExpireIn(Carbon::now()->addYears(20));//You can also use addDays(10) 
        Passport::pruneRevokedTokens(); //basic garbage collector
    }
}
  • 确保您使用的是护照的最新版本目前我使用的是1.0.8版本,但我可能已经过时了,因为他们和社区每隔几周就会不断推出新的版本。

以下是与此问题相关的一些问题的链接。你可以在下面的链接中找到你的答案。如果上面提到的不是你想要的。

护照-“未经认证。”-拉威尔5.3

非常详细

https://github.com/laravel/passport/issues/151

 类似资料:
  • 我使用Laravel 5.4 Passport作为个人代币。我正在尝试使用Postman向/api/user发送GET请求。我通过向/oauth/personal access令牌发送get请求来获取令牌。从这个响应中,我获取了我认为是令牌的内容,然后我在Postman中设置了一个GET请求,就像文档中说的添加Accept一样= 登录后,我去http://192.168.10.15/oauth/p

  • 我知道之前有人对此提出过疑问,但在尝试推送存储库时,我仍然会遇到一个恼人的错误: 在我输入我的个人访问令牌后,它会出错: 远程:2021 8月13日取消了对密码验证的支持。请使用个人访问令牌。遥控器:请看https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/了解更多信息。致命:身份验证

  • 我使用Passport在Laravel中创建了一个API,一切正常,生成访问令牌并使用Postman中的令牌来显示数据。当用户登录时,我将访问令牌保存在数据库用户表中问题是我必须手动传递postman标头部分中的访问令牌。如何将生成的访问令牌自动传递到标头,或我需要的任何地方。

  • 我有一个npm包,它依赖于package.json中的私有github服务器中的回购: github服务器使用个人访问令牌(在身份验证期间用作密码)进行安全保护。在本地构建中,用户可以为https://private.github.example.com存储其,git将在npm构建期间自动使用它们访问github存储库。 我在Jenkins中也有一个技术用户,它通常可以通过个人访问令牌访问gith

  • 这段代码以前可以工作,但现在我在尝试验证时出现错误。这里有一个简单的例子,您可以重新创建这个问题。这是一个使用最新版本的firebase模块(3.4.1)的节点脚本。 我刚刚生成了一个启用了所有权限的新GitHub个人访问令牌。我还是会犯同样的错误。 这里有个错误: 有什么想法吗?我查看了最近的变更日志,但没有找到任何与此相关的内容。 更新 似乎已删除对个人访问令牌的支持。我已经将测试应用程序切换

  • 问题内容: 我可以通过多种方式提出这个问题,例如如何使用Github个人访问令牌配置Jenkins凭据如何使用Github个人访问令牌在Jenkins中克隆Github存储库 所以这是问题 我知道的替代解决方案 连接 Jenkins中的配置,但我的问题是如何使用以下方法与Github建立Github连接 问题答案: 经过来自Stackoverflow的多个线程的多次讨论之后 我发现一个有用的线程。