问题理解 Laravel 6.0 Passport with Password Grant Tokens 流程
Posted
技术标签:
【中文标题】问题理解 Laravel 6.0 Passport with Password Grant Tokens 流程【英文标题】:Issue understanding Laravel 6.0 Passport with Password Grant Tokens flow 【发布时间】:2020-07-13 12:39:21 【问题描述】:我在理解验证客户端以使用基于 Laravel 构建的 API 的整个过程时遇到问题。有些事情现在不适合我。
我正在尝试在 Laravel 上实现 API 和 OAuth 服务器。 API 将由受信任的本机移动应用程序使用。对我来说更有意义的流程是 Laravel 的 Passport 文档中描述的“密码大令牌”:https://laravel.com/docs/7.x/passport#password-grant-tokens
据我了解实现:
-
用户安装我的移动应用。
安装后,系统会提示他“输入用户名/密码”以继续使用该应用
点击提交后,我在“/oauth/token”上使用“grant_type”、“client_id”、“username”、“password”、“scope”向我的 Laravel oAuth 服务器实现发出 POST 请求。我省略了“client_secret”,因为我知道将秘密存储在客户端设备上并不是一个好主意。
服务器然后检查已经创建的(`php artisan passport:client --password`)“client_id”、“username”、“password”和“response_type”
如果所有匹配,它会生成一个令牌,并以“acces_token”和“refresh_token”响应
我现在可以调用我的 API 端点“/api/whatever/method_name”
我的问题在第 4 点。如果用户已经存在于我的数据库中,我只能发出访问令牌,但我假设这是用户第一次使用我的应用程序。 postman_response
我是否还需要一个“身份验证”步骤,用户发送用户名/密码并且 OAuth 服务器提示“授权应用程序”使用您的数据,此时将用户保存在数据库中,然后继续?
【问题讨论】:
如果你想在你的应用程序中注册一个用户,只需将注册表单指向你的 laravel api 的公共路由,你的整个应用程序不必使用护照中间件。跨度> 【参考方案1】:通常您有一个注册途径,即未经授权,否则您无法进入应用程序。想象一下您的路线文件。
Route::middleware('auth:api')->group(function ()
Route::post('/todos', 'TodoController@index');
);
// Without auth
Route::post('/register', 'RegisterController@register');
为了隐藏凭据,使用代理方法通常更容易,因此您的后端可以保存 client_id 和 client_secret,因为它们始终相同(除非您正在构建 oauth 服务器)。
Route::post('/login', 'LoginController@login');
会收到用户名和密码,内部调用oauth/token,并在过程中添加client_id
和client_secret
并返回token。要通过注册节省一些调用,您可以在注册后执行相同的方法,获取 oauth 令牌,使用您在注册时拥有的凭据并立即返回令牌。
【讨论】:
【参考方案2】:我会推荐以下内容:
-
在登录方法中,检查用户是否存在。
如果存在,请让他登录。
否则,先注册他,然后再登录
最后,返回访问令牌
【讨论】:
以上是关于问题理解 Laravel 6.0 Passport with Password Grant Tokens 流程的主要内容,如果未能解决你的问题,请参考以下文章
无法找到 [Laravel\Passport\Client] 的工厂
Laravel 5.3 + Passport:总是未经身份验证的错误