标签: laravel-passport

使用 Passport 密码授予和/或 Guzzle 时服务器冻结

我们正在将 Laravel 网站改造成 Laravel SPA,并在未来将其改造成使用 Web 应用程序的移动应用程序,因此我们需要某种 API 身份验证。为此,我们使用 Laravel Passport。

我一直在使用 Laravel 5.5 并遵循文档上的指南,但是当我尝试使用 postman 的新登录时,服务器冻结,HTTP 请求永远不会处理。

经过一些调试,我发现当我使用 Guzzle 发布到 /oauth/token 路由时,它崩溃了。但是当我使用 Postman 访问该路由时,没有问题。

这是我的代码:

    public function login(Request $request){
    $http = new Client();

    var_dump(1);
    //die
    $response = $http->post('http://localhost:8000/oauth/token', [  //Con postman esta ruta funciona
            'form_params' => [
            'grant_type' => 'password',
            'client_id' => env('PASSWORD-CLIENT_ID',2),
            'client_secret' => env('PASSWORD-CLIENT_SECRET',2),
            'username' => $request->username, //parece usar correo, no nombre de usuario
            'password' => $request->password,
            'scope' => '*',
        ],
    ]);

    var_dump(2);
    //die;
    return json_decode((string) $response->getBody(), …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-passport

5
推荐指数
1
解决办法
2093
查看次数

Laravel Passport createToken 错误

您好,我正在尝试从用户对象生成令牌,如下所示:

<?php
namespace App\Http\Controllers\API\Auth;

use App\Models\User;
use App\Http\Controllers\Controller;
use Auth;
use Response;

class LoginController extends Controller
{
    public function login() { 
        $content = [];
        if(Auth::attempt(['email' => request('username'), 'password' => request('password')])){
            $user = Auth::user();
            $role = $user->roles()->first()->name;
            $content['access_token'] = $user->createToken('Token Name')->accessToken;
            $status = 200;
        }
        else{
            $content['error'] = "Unauthorised";
            $content['message'] = "Your email or password are incorrect";
            $status = 401;
        }
        return response()->json($content, $status); 
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到 500 服务器错误:

Trying to get property of non-object
Run Code Online (Sandbox Code Playgroud)

我在用户模型上有 HasApiTokens,并且使用内置 Passport 路由生成令牌没有问题。

这是堆栈跟踪的第一部分:

    [2018-06-12 …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-passport

5
推荐指数
1
解决办法
9452
查看次数

如何在 API 注册中实现 Laravel 的必须验证电子邮件功能?

我在我的用户模型中实现了 MustVerifyEmail 接口

\n\n
class User extends Authenticatable implements MustVerifyEmail\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还制作了 VerificationApi 控制器

\n\n
<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse Illuminate\\Foundation\\Auth\\VerifiesEmails;\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Auth\\Events\\Verified;\n\nclass VerificationApiController extends Controller\n{\n    use VerifiesEmails;\n\n    * Mark the authenticated user\xe2\x80\x99s email address as verified.\n\n    *\n\n    * @param \\Illuminate\\Http\\Request $request\n\n    * @return \\Illuminate\\Http\\Response\n\n    */\n\n    public function verify(Request $request) {\n\n    $userID = $request[\'id\'];\n\n    $user = User::findOrFail($userID);\n\n    $date = date("Y-m-d H:i:s");\n\n    $user->email_verified_at = $date; // to enable the \xe2\x80\x9cemail_verified_at field of that user be a current time stamp by mimicing the …
Run Code Online (Sandbox Code Playgroud)

php email-verification laravel-passport laravel-5.8

5
推荐指数
1
解决办法
6078
查看次数

如何向 laravel-passport 访问令牌添加自定义声明?

我刚刚使用了 laravel-passport,它与 jwt auth 相同。

我想向我的 accessToken 添加一些自定义声明,可以吗?

我想传递2fa_status => true访问令牌,当使用此访问令牌进行 API 调用时,我也希望来自令牌的声明。

例如代币的预期索赔

{
  "aud": "7",
  "jti": "123",
  "iat": 1568368682,
  "nbf": 1568368682,
  "exp": 1599991082,
  "sub": "2",
  "scopes": [],
  "2fa_status": false
}
Run Code Online (Sandbox Code Playgroud)

我生成令牌如下:

  $tokenResult = $user->createToken('Personal Access Token');
Run Code Online (Sandbox Code Playgroud)

laravel laravel-passport

5
推荐指数
1
解决办法
8126
查看次数

删除 Laravel Passport 用户令牌

在我的单元测试中,我有一个为其生成令牌的用户:

$tokenString = $this->user->createToken('PHPunit', ['example'])->accessToken;
Run Code Online (Sandbox Code Playgroud)

我之后如何删除该用户的令牌?

php laravel laravel-passport

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

使用外部 Laravel Passport Lumen API 进行 Laravel 客户端身份验证

我一直在网上查找,但找不到任何方法。让我解释一下,我有一个 API(Laravel Passport on lumen),我用 Postman 测试了它,我用 oauth 获取了我的访问令牌,一切都很好。现在我有另一个 Laravel 应用程序,我想知道如何使用 API 登录来保留所有身份验证内容。我见过很多实际检索 api_token 的应用程序,它们使用“Auth::user()->where('api_token', $token)”。但我发现这是错误的,因为我不希望我的客户端访问数据库,我希望对数据库的每个请求都由 API 处理。那可能吗?

authentication api laravel lumen laravel-passport

5
推荐指数
1
解决办法
3074
查看次数

将 2FA 添加到基于 Laravel Passport 的 API

让我有点惊讶的是,我没有找到任何关于使用护照对 Laravel 进行双因素身份验证的实际示例或最佳实践。

由于我想在用户登录 API 并接收其访问令牌时实现此步骤,因此我不确定如何以安全的方式进行处理。

目前流程如下:

  1. 用户看到前端登录页面(vue SPA)。
  2. 用户输入usernamepassword点击提交。
  3. SPA 向 API 发送请求。
  4. API 会使用访问令牌进行响应,如果出现问题,则会给出未经过身份验证的错误。
  5. SPA可以使用访问令牌向API请求其他资源,直到令牌失效。

由于我希望用户能够单独激活或停用 2FA(因为有些客户端可能不想使用它,有些客户端会),所以我会在表中添加一个新列来users存储 2FA 是否启用。

但接下来如何继续呢?如果用户像以前一样定期使用username和进行身份验证password,那么 API 就会知道他是否“需要”第二个身份验证步骤并返回一个标志,以便前端知道显示另一个视图来输入令牌?

感谢您的任何意见:)

two-factor-authentication laravel laravel-passport

5
推荐指数
1
解决办法
4546
查看次数

向 Laravel Passport 添加 SSO 流程

我们正在尝试使用 Laravel Passport 实现 SSO 解决方案。关于这个主题已经有一个问题,但我认为这个问题更多的是关于本质问题。

我们的要求是:

  • 在 Passport.com 上运行的 Laravel Passport 服务
  • 不同域上的一些第一方网站:foo.com、bar.com
  • 用户可以通过直接输入访问详细信息(密码授予)来登录 foo.com 和 bar.com
  • 如果用户登录 foo.com,然后访问 bar.com,他们应该自动登录

根据我对 Oauth2 的理解,系统应该如下工作:

初始登录流程:

  1. 用户在 foo.com 上输入详细信息
  2. foo.com 使用密码授予向 Passport.com/oauth/token 发出请求,并检索访问令牌和刷新令牌。此外,还会生成并返回 SSO 令牌。
  3. foo.com 将用户重定向到 Passport.com/sso/passthrough ,并传递 SSO 令牌和返回 URL 作为查询参数。
  4. Passport.com 将令牌保存为 cookie,然后重定向到返回 URL。
  5. 用户返回 foo.com 并且可以使用该网站

请注意,必须重定向到 Passport.com,否则 Safari 和 Chrome 等浏览器在隐身模式下会将 Passport.com 视为第三方域,并且 Cookie 将被阻止。

单点登录流程:

  1. 用户访问 bar.com
  2. bar.com 使用 SSO 授权和重定向 URI bar.com/sso/return 向 Passport.com/oauth/authorize 发出 AJAX 请求
  3. 在 Passport.com 上,SSO Grant 在 cookie 中查找 …

single-sign-on oauth-2.0 laravel laravel-passport

5
推荐指数
0
解决办法
922
查看次数

dusterio/lumen-passport:在 JWT 负载中传递自定义数据

我正在使用lumen-passport进行身份验证和授权。当我解码 JWT 令牌时,我得到的有效负载如下:

{
  "aud": "9420abb1-1470-4895-8666-a702b415cb59",
  "jti": "03b55ab9d73953207a7e568657a1f83a9c5dcc0162b43fe4816c6086d30d4002b9bd74604ba99ea6",
  "iat": 1635781614.447866,
  "nbf": 1635781614.447872,
  "exp": 1635783414.409659,
  "sub": "1b910fc7-54bc-44ef-885b-869b2a095c11",
  "scopes": []
}
Run Code Online (Sandbox Code Playgroud)

sub是用户uuid。我想传递自定义数据以及sub如下所示。

{
  "aud": "9420abb1-1470-4895-8666-a702b415cb59",
  "jti": "03b55ab9d73953207a7e568657a1f83a9c5dcc0162b43fe4816c6086d30d4002b9bd74604ba99ea6",
  "iat": 1635781614.447866,
  "nbf": 1635781614.447872,
  "exp": 1635783414.409659,
  "sub": "1b910fc7-54bc-44ef-885b-869b2a095c11",
  "custom_data": "this is a custom data.",
  "scopes": []
}
Run Code Online (Sandbox Code Playgroud)

我如何在dusterio/lumen-passportlaravel/passport中实现这一点?

我生成令牌如下:

public function authenticateWithPassword(
        ServerRequestInterface $request,
        string $email,
        string $password,
        string $scope = ''
    ): Response {
        $newBody = [
            'grant_type' => 'password',
            'client_id' => $this->clientId,
            'client_secret' => …
Run Code Online (Sandbox Code Playgroud)

payload jwt laravel-passport passport-jwt

5
推荐指数
0
解决办法
398
查看次数

使用Laravel 5.4和Passport进行Multi Auth

我正在尝试使用Laravel Passport设置多个身份验证,但它似乎不支持它.我使用密码授予发出令牌,要求我传递想要访问令牌的用户的用户名/密码.

我有3个auth警卫/提供者设置,总共4个.用户,供应商,管理员和API

其中2个Auths需要访问护照,因此每个用户都需要能够发放令牌.但是,Passport会自动获取API身份验证提供程序,但我希望根据登录的用户进行更改.如果用户确实是用户提供商,那么它是供应商,然后是供应商提供商.

但Passport目前只支持1种用户类型,因此默认为API提供者.

这有什么更好的吗?或者我应该使用基于角色的身份验证.

php oauth-2.0 laravel laravel-passport

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