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

如何使用Laravel护照与密码授予令牌?

韩夕
2023-03-14

我刚读了报纸https://laravel.com/docs/5.6/passport我有一些疑问,希望有人能帮助我:

首先,在某些上下文中,我想使用Passport为我的移动应用程序(第一方应用程序)提供Oauth身份验证。

>

要向我的应用程序注册用户,我使用:$user-

对于登录用户,我使用的URL:http://example.com/oauth/token并作为参数发送:

{"用户名":"user@email.com","密码":"用户密码","grant_type":"密码","client_id": 1,//我从命令中得到的客户端ID(问题1)"client_secret":"Shhh"//我从中得到的客户端秘密命令(问题1)}

当我使用上一个endpoint登录用户时,我得到一个refresh\u令牌,我读到我可以通过http://example.com/oauth/token/refresh但是我试图请求刷新,我得到了错误419,我从csrf验证中删除了url oauth/token/refresh,现在我返回“消息”:“Unauthenticated” ,我提出以下请求:

内容类型:x-www-form-urlencoded grant\u类型:refresh\u token refresh\u token:refresh token//我从命令(问题3)客户机\u id:1//我从命令(问题1)客户机\u secret:Shhh//我从命令(问题1)范围获得的客户机机密:“”

我应该使用这个endpoint吗?或者没有必要考虑到我正在尝试开发的应用程序。

非常感谢你的帮助!


共有2个答案

许正平
2023-03-14

处理问题5

最后,我从passport获得了很多endpoint,我认为我不会使用这些endpoint,例如:oauth/clients*oauth/personal access tokens*是否有办法将它们从passport发布的endpoint中删除?

Passport::routes($callback=null,数组$options=[])采用可选的$callback函数和可选的$options参数。

回调函数接受一个$router参数,您可以从该参数中选择要安装的路由,如下面的AuthServiceProvider中所示。php支持更精细的配置:

Passport::routes(function ($router) {
    $router->forAccessTokens();
    $router->forPersonalAccessTokens();
    $router->forTransientTokens();
});

Passport::tokensExpireIn(Carbon::now()->addMinutes(10));

Passport::refreshTokensExpireIn(Carbon::now()->addDays(10));

这样我们只创建我们需要的护照路线。

forAccessTokens();使我们能够创建访问令牌。
for个性化的AccessTokens();使我们能够创建个人令牌,尽管我们不会在本文中使用它。最后,为刷新令牌创建路由。

如果运行php artisan route:list,您可以看到Laravel Passport安装的新endpoint。

| POST | oauth/token         | \Laravel\Passport\Http\Controllers\AccessTokenController@issueToken
| POST | oauth/token/refresh | \Laravel\Passport\Http\Controllers\TransientTokenController@refresh
薛博赡
2023-03-14

如果您正在使用自己的api,则不需要调用http://example.com/oauth/token用于用户登录,因为您需要在应用程序端存储客户端id和客户端机密。最好创建一个用于登录的api,在那里您可以检查凭据并生成个人令牌。

public function login(Request $request)
{
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            // Authentication passed...
             $user = Auth::user();
             $token = $user->createToken('Token Name')->accessToken;

            return response()->json($token);
        }
}

最后,我从passport获得了很多endpoint,我认为我不会使用这些endpoint,例如:oauth/clients*,oauth/personal access tokens*有没有办法将它们从passport发布的endpoint中删除?

您需要从AuthServiceProvider中删除护照::路线();并手动将所需的护照路线。我认为你只需要oauth/Token路由。

“应用程序”的价值到底是什么?

若您选中oauth_access_tokens表,它就有name字段<代码>$user-

如何使用Laravel护照与密码授予令牌?

要生成密码授予令牌,您必须将客户端id客户端密码存储在应用程序端(不推荐,请选中此项),并假设如果您必须重置客户端密码,则旧版本的应用程序停止工作,这些就是问题所在。要生成密码授予令牌,您必须像步骤3中提到的那样调用此api。

$http = new GuzzleHttp\Client;

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],
]);

return json_decode((string) $response->getBody(), true);

生成令牌从refresh_token

$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' => '',
    ],
]);

return json_decode((string) $response->getBody(), true);

你可以看看这个https://laravel.com/docs/5.6/passport#implicit-也给代币。

 类似资料:
  • 我在理解验证客户端以使用基于Laravel构建的API的整个过程时遇到问题。有些东西现在不适合我。 我试图在Laravel上实现一个API和一个OAuth服务器。API将由受信任的本机移动应用程序使用。对我来说更有意义的流程是“密码大令牌”,如Laravel的Passport文档中所述:https://laravel.com/docs/7.x/passport#password-授予代币 据我了解

  • 我在Laravel中创建了两个项目,一个是护照服务器,另一个是客户端。我在服务器项目中配置了完整的护照。我也得到了access_token。 当我授权我的客户端项目时,它会在我的浏览器中显示这个。 {“令牌类型”:“承载”、“到期日”:31536000,“访问令牌”:*******,“刷新令牌”:******} 现在,我的问题是如何为用户传递/授予访问令牌并转到我的客户端面板。我已经用邮递员检查过

  • 我正在构建一个API,并使用Laravel Passport进行身份验证。 API正在用于我们的移动应用程序,因此我们正在使用密码授予客户端。 一切都很好,用户可以登录以获得访问令牌。我们创建了一个注册endpoint,允许用户注册。此时,我们也需要API返回访问令牌。 通过查看文档,无法通过编程方式创建访问令牌。 如何在控制器中为密码授予客户端创建访问令牌?我显然不想对自己的API执行HTTP请

  • 我一直在广泛阅读有关OAuth和OpenID Connect的内容,但此问题专门涉及OAuth2资源所有者密码授予(又名OAuth2资源所有者凭据授予,又名OAuth2密码授予) 某些资源(例如Justin Richer的《OAuth2 in Action》一书)说不要使用OAuth2资源所有者密码授予进行身份验证-请参阅书中的第6.1.3节。 以下其他好资源都说我们可以使用OAuth2资源所有者

  • 我正在使用Laravel的Passport库,并使用密码授权类型生成访问令牌。令牌过期时间已设置为10分钟。 现在我的问题是,当令牌过期时,用户会得到

  • 如果我有一个带有Laravel后端的单页web应用程序,那么我最好的身份验证选择似乎是Passport,它具有密码授权身份验证流。在Passport中,返回一个访问令牌和一个刷新令牌。 为了安全起见,我想发布一个短期访问令牌,并在它过期时刷新它。然而,关于在Javascript应用程序中使用OAuth的所有可用信息都说“不要让前端访问您的刷新令牌”,因为它寿命很长,其他人可以使用它来生成新的访问令