Php 如何使用Laravel Passport在API中正确实现OAuth?

Php 如何使用Laravel Passport在API中正确实现OAuth?,php,laravel,api,oauth,laravel-passport,Php,Laravel,Api,Oauth,Laravel Passport,我正在尝试创建一个API,并在我自己的应用程序(web应用程序和本机移动应用程序)中使用它,并将其用于第三方应用程序(这是为了将来的目的) 我已经阅读了文档,我有一些疑问,希望有人能帮助我 作为一名开发人员,我总是试图找到实现我的项目的最佳和正确的方法,并为项目的目的找到合适的包 我想做什么的简要说明: 我想创建一个API,我将在我的web和移动应用程序中使用我自己的API,我的API有两个端点用于注册和登录学生和教师。他们可以使用电子邮件和密码登录。每个用户类型都有自己的信息。教师可以有一个

我正在尝试创建一个API,并在我自己的应用程序(web应用程序和本机移动应用程序)中使用它,并将其用于第三方应用程序(这是为了将来的目的)

我已经阅读了文档,我有一些疑问,希望有人能帮助我

作为一名开发人员,我总是试图找到实现我的项目的最佳和正确的方法,并为项目的目的找到合适的包


我想做什么的简要说明:

我想创建一个API,我将在我的web和移动应用程序中使用我自己的API,我的API有两个端点用于注册和登录学生和教师。他们可以使用电子邮件和密码登录。每个用户类型都有自己的信息。教师可以有一个简历,学生可以看到教师的简历(整个创建和阅读简历的过程都在我的API中处理),这两种用户类型可以相互通信。我正在使用Laravel6.x版本来构建我的API。在我们的子域中,我们为开发者提供了一个部分,开发者可以注册帐户并获取/购买一个访问令牌,以请求我的API并使用它,另一方面,我希望当学生或教师登录到他们的帐户时,API为该用户生成一个访问令牌,这样我的应用程序就可以使用该令牌并在每次请求中传递该令牌,以使用户通过身份验证以访问他们的私人资源,比如他们的仪表板,因为我们知道API是无状态的,我们不能使用会话来存储用户凭据,因此我们需要一个访问令牌

Laravel Passport能否生成开发者访问令牌和用户(教师或学生)访问令牌 在这里使用OAuth来开发我的API是否正确? 或者我可以使用tymondesigns/JWT包来实现这些目的吗


我必须说,我对Oauth和基于API的应用程序是新手。我读过一些关于Oauth的文章,我对Oauth术语有点熟悉,但仍然不知道如何正确地实现这个项目

下面是我的问题:

  • 什么是Oauth服务器?API托管的是我自己的服务器吗
  • Laravel Passport配置和数据库迁移之后,Laravel Passport在我的数据库中创建了一些表,如果您能告诉我每个表的用途,我将不胜感激?表名为失败的\u作业oauth\u访问\u令牌oauth\u验证码oauth\u客户端oauth\u个人访问\u客户端oauth\u刷新\u令牌
  • 我已将我的Laravel应用程序配置为使用Laravel Passport,并在api.php文件中创建了两条路由
  • 然后,我创建了
    UserAuthController.php
    文件,并编写了登录和注册方法。他们正在毫无问题地工作。用户注册或登录其帐户后,我的代码将生成一个个人访问令牌

    $token = $user->createToken('authentication')->accessToken;
    
    然后学生或教师可以使用此访问令牌访问自己的私人资源。为我的两类用户创建个人访问令牌是否正确?什么是个人访问令牌?
    我只知道您可以将其传递到请求头,服务器将授权您访问私有资源。我所说的私有资源是指受API中间件保护的端点,如下所示:

    Route::post('/update-info','API\Auth\UserAuthController@update')->middleware('auth:api');
    

  • 当老师和学生登录到他们的帐户时,我是否正确地创建了个人访问令牌?!这种方法有效,但如果还有其他方法,我会寻找正确的方法
  • 奇怪的是,Laravel Passport每次用户登录时都会创建一个令牌,它不会检查用户是否已经创建了令牌?如果有人可以访问
    API
    端点,他们可以向/login端点发出post请求并创建大量令牌。这是个问题吗?如何修复它
  • 当我创建个人访问令牌时我需要将一个参数传递给
    createToken($arg)
    方法,它存储在oauth\u personal\u access\u clients表中。这样做的目的是什么?它只是为了拉威尔护照,还是我将来需要它
  • 我有一些端点不受
    auth:api
    中间件的保护,例如,每个用户都访问我的应用程序,他们可以搜索教师姓名和课程以及,没有必要让他们先登录或注册。我的应用程序中的每个人都可以访问这些端点,并且可以自由搜索和提前搜索某些信息。我的问题是,如果我让每个人都可以访问,我如何保护这些只有我的第一方应用程序和第三方应用程序才能访问的端点。我的意思是,我不希望人们通过命令行邮递员或某种没有访问令牌的工具来访问它们,我希望保护这些端点免受攻击者的攻击,而不是发出大量请求来关闭我的服务器。如何保护此类端点?我知道我可以限制每分钟的请求,但我不知道限制多少?还有别的办法吗
  • 我看到了
    Route::post('/update-info','API\Auth\UserAuthController@update')->middleware('auth:api');
    
    /oauth/clients
    /oauth/clients/{client-id}
    /oauth/authorize
    /oauth/token