我刚读了报纸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吗?或者没有必要考虑到我正在尝试开发的应用程序。
非常感谢你的帮助!
处理问题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
如果您正在使用自己的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的所有可用信息都说“不要让前端访问您的刷新令牌”,因为它寿命很长,其他人可以使用它来生成新的访问令