标签: laravel-passport

通过Laravel Passport获取经过身份验证的用户并授予密码

我用Laravel做了一个API REST,现在我正在尝试使用它.问题是我需要在API中验证用户,我正在使用密码授予方法.我可以正确地验证用户,我可以获得访问令牌,但从那时起,我没有看到在我的消费应用程序中使用访问令牌检索经过身份验证的用户的方法.

我尝试使用这样的路由API:

Route::get('/user', function(Request $request) {
    $user = $request->user();
    // Even with
    $user = Auth::user();

    return $user;
});
Run Code Online (Sandbox Code Playgroud)

没有骰子.我正在阅读Passport代码,但我无法弄明白.我的猜测是我需要指定一个新的防护类型或类似东西,因为Laravel Passport似乎没有提供这种类型的防护类型......

澄清事情:

  • 我有一个API REST应用程序,它是oAuth2服务器.
  • 我有另一个使用API​​ REST的应用程序.
  • 我知道工作流程.在我的情况下,使用密码授予,我在我的消费者应用程序中获取用户凭据,然后我向/ oauth/token发出请求,指定grant_type密码,我提供用户凭据以及我的客户凭据,我相信他们用" php artisan passport:client --password "生成(注意--password选项)
  • 我可以毫无问题地获得访问令牌.我现在需要的是获取我刚刚从API REST验证的用户的JSON表示.但问题是:我只有一个访问令牌.我无法与用户联系.

或者我可以吗?也许我可以扩展验证密码授权请求的方法,以将生成的访问令牌与正在验证的用户相关联......*灯泡打开*

消费应用测试代码:

try {
    $client = new Client();
    $result = $client->post('https://myapi.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '5',
            'client_secret' => 'my_secret',
            'username' => 'user_I_am_authenticating',
            'password' => 'the_user_password',
            'scope' => '',
        ] …
Run Code Online (Sandbox Code Playgroud)

php oauth-2.0 laravel-passport laravel-5.4

15
推荐指数
3
解决办法
2万
查看次数

访问令牌:撤销与删除

我正在创建一个路由/user/logout使用dusterio/lumen-passport和在控制器操作中我手动撤销令牌,导致用户被注销.

我有两个注销用户的选项.撤消令牌(将令牌保留在数据库中 - 只需设置一个标志,告知令牌无用)并删除令牌.

我的问题很简单:

管理令牌的最佳方法是什么?我应该通过删除或撤销来退出吗?

将来,我将使用redis存储令牌,所以我想我应该删除令牌,因为在redis服务器中保留过期数据是没有意义的.

security oauth-2.0 laravel lumen laravel-passport

15
推荐指数
1
解决办法
1727
查看次数

如何使用Laravel Passport通过API测试身份验证?

我正在尝试使用Laravel的Passport测试身份验证,并且没有办法......总是收到该客户端的401无效,我会留下您尝试的内容:

我的phpunit配置是来自laravel的基础配置

测试/ TestCase.php

abstract class TestCase extends BaseTestCase
{
    use CreatesApplication, DatabaseTransactions;

    protected $client, $user, $token;

    public function setUp()
    {
        parent::setUp();

        $clientRepository = new ClientRepository();
        $this->client = $clientRepository->createPersonalAccessClient(
            null, 'Test Personal Access Client', '/'
        );
        DB::table('oauth_personal_access_clients')->insert([
            'client_id' => $this->client->id,
            'created_at' => date('Y-m-d'),
            'updated_at' => date('Y-m-d'),
        ]);
        $this->user = User::create([
            'id' => 1,
            'name' => 'test',
            'lastname' => 'er',
            'email' => 'test@test.test',
            'password' => bcrypt('secret')
        ]);
        $this->token = $this->user->createToken('TestToken', [])->accessToken;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试/特征/ AuthTest.php

class AuthTest extends TestCase
{
    use …
Run Code Online (Sandbox Code Playgroud)

testing phpunit laravel laravel-5 laravel-passport

14
推荐指数
4
解决办法
1万
查看次数

Laravel 6 护照在错误凭证上返回 400 错误请求

我的 Vue 后端使用 Laravel 6 护照授权密码

当我向oauth/token发送正确的凭据时,它会工作并返回令牌,但是当我发送错误的(电子邮件/密码)时,它会返回 400 而不是 401 与此消息。

    {
    "error": "invalid_grant",
    "error_description": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.",
    "hint": "",
    "message": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used …
Run Code Online (Sandbox Code Playgroud)

oauth-2.0 laravel laravel-passport laravel-6

14
推荐指数
1
解决办法
1万
查看次数

护照 - "未经验证的". - Laravel 5.3

我希望有人可以解释为什么我unauthenticated已经执行了成功的Oauth 2身份验证过程.

我已经Passport像Laravel的文档中那样设置了包,我成功地进行了身份验证,获得了令牌值,等等.但是,当我尝试做一个get请求时,比方说/api/user,我得到一个Unauthenticated错误作为回应.我使用令牌值作为带有键名的标题Authorization,正如文档中所述.

Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware("auth:api");
Run Code Online (Sandbox Code Playgroud)

这个函数假设让我自己作为经过身份验证的用户,但我只是得到了Unauthenticated.同样,如果我只是返回第一个用户,我会再次获得Unauthenticated.

Route::get('/test', function(Request $request) {
    return App\User::whereId(1)->first();
})->middleware("auth:api");
Run Code Online (Sandbox Code Playgroud)

在从一个教程Laracast,通过设置导向Passport,导向器具备->middleware("auth:api")在他的路线.但如果不存在,那么就根本不需要身份验证!

请,任何建议或答案都欢迎!

authentication laravel-5.3 laravel-passport

13
推荐指数
2
解决办法
8962
查看次数

为什么Client Creadentials应与Laravel Passport中的用户相关联?

我想使用Client Credentials来验证客户端应用程序以访问API.

我的问题是创建客户端凭据.使用php artisan passport:client要求我输入user_id以将客户端关联到该用户.我不明白.为什么客户端应用程序必须与用户关联?!或者还有另一种方式吗?

passport:client命令仅支持创建密码授予客户端和个人授权客户端.我不认为他们中的任何一个是我需要的.

我真正需要的是创建客户端凭据,仅客户端应用程序使用它来授权自己访问某些API.怎么做?

php oauth-2.0 laravel laravel-5 laravel-passport

13
推荐指数
2
解决办法
7102
查看次数

Laravel Passport中间件保护的路由“未经身份验证”问题

我使用Laravel Passport进行身份验证,因此我将路由放入中间件保护中。

更新

为了清楚起见,我也添加了UsersController。

public function getUser()
{
    $users = Auth::user();
    return response()->json($users);
}
Run Code Online (Sandbox Code Playgroud)

//

public function getUser()
{
    $users = Auth::user();
    return response()->json($users);
}
Run Code Online (Sandbox Code Playgroud)

当然,我需要登录,否则看不到受保护的路由。我在AuthController控制器内部做了一个and内部的登录功能。

控制者

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function () {
    /* users */
    Route::get('/users', 'Api\UsersController@getUser');

    /* fetch */
    Route::get('/articles', 'Api\ArticlesController@allArticles');
    Route::get('/article/{id}', 'Api\ArticlesController@singleArticle');
});
Run Code Online (Sandbox Code Playgroud)

在vuex的前端,我有一个动作呼叫。

retrieveToken(context, credentials){
    return new Promise((resolve, reject) => {
            axios.post("api/v1/login", {
                email: credentials.username,
                password: credentials.password,
            })
            .then(response => {
                const token = response.data.access_token;
                localStorage.setItem("access_token", token);
                context.commit("retrieveToken", token);
                resolve(resolve);
            }) …
Run Code Online (Sandbox Code Playgroud)

laravel vue.js laravel-5 vuejs2 laravel-passport

13
推荐指数
1
解决办法
532
查看次数

如何在 Laravel Passport 中获取刷新令牌?

我正在使用 Laravel 6.7 并尝试使用Passport进行用户身份验证。

我可以在用户注册时为他们创建访问令牌。这是代码:

$user = User::create($input);
$user->createToken('auth-token');
Run Code Online (Sandbox Code Playgroud)

正如我在AuthServiceProvider.php文件boot()函数中定义的那样,此访问令牌的有效期为 15 分钟,如下所示:

Passport::personalAccessTokensExpireIn(Carbon::now()->addMinutes(15));
Run Code Online (Sandbox Code Playgroud)

我想使用刷新令牌刷新它,但似乎无法理解如何。

我到处找(包括 Laravel 网站),他们都告诉我这样做:

$http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'refresh_token',
        'refresh_token' => 'the-refresh-token',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'scope' => '',
    ],
]);
Run Code Online (Sandbox Code Playgroud)

没有任何明确的解释,以什么价值观'the-refresh-token''client-id''client-secret'意味着是。

堆栈溢出的一个答案如下:

您必须发送旧的刷新令牌 ( 'refresh_token' => 'the-refresh-token') 并且此代码生成一个新令牌和刷新刷新。

但是我没有刷新令牌,我正在尝试创建一个。我只是创建一个随机字符串吗?

oauth-2.0 laravel refresh-token laravel-passport

13
推荐指数
1
解决办法
2万
查看次数

调用未定义的方法 Laravel\Passport\Passport::routes()

我尝试使用 Laravel-passport 所以我在我的项目中安装了这个包,但是当我想制作路线时,我在 AuthServiceProvider 中编写了这段代码

 public function boot()
    {
        $this->registerPolicies();
   
        Passport::routes();
 
    }
Run Code Online (Sandbox Code Playgroud)

当我在 cmd 中运行 php artisan route:list 时,我遇到此错误

  • 调用未定义的方法 Laravel\Passport\Passport::routes()

authentication laravel laravel-passport

13
推荐指数
1
解决办法
2万
查看次数

作曲家无法安装laravel /护照

我用它创建了一个新项目

laravel new blogposts
Run Code Online (Sandbox Code Playgroud)

使用全局安装在我的ubuntu 18上的"Laravel Installer 2.0.1".

当我试图使用安装护照

composer require laravel/passport
Run Code Online (Sandbox Code Playgroud)

以下错误是他们的

Using version ^6.0 for laravel/passport
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.  

Problem 1
- Conclusion: don't install laravel/passport v6.0.6

- Conclusion: don't install laravel/passport v6.0.5
- Conclusion: don't install laravel/passport v6.0.4
- Conclusion: don't install laravel/passport v6.0.3
- Conclusion: don't install laravel/passport v6.0.2
- Conclusion: don't install …
Run Code Online (Sandbox Code Playgroud)

php laravel composer-php laravel-passport

12
推荐指数
3
解决办法
4955
查看次数