Ответы пользователя по тегу API
  • Как в laravel passport создать refresh_token?

    greabock
    @greabock
    Могу
    1. По умолчанию, персональные токены выдаются сроком на 1 год. (нужно ли беспокоится о времени истечения?)

    2. Персональные токены - это скорее "хак", который позволяет обойти стандартный флоу OAuth 2. Обычно он используется для упрощения доступа к апи, или персональных экспериментов.

    3. Правильный способ сделать то, что вы ( как я предполагаю) хотите, это запросить токен для password grant

    use GuzzleHttp\Psr7\ServerRequest as GuzzleRequest;
    use GuzzleHttp\Psr7\Response as GuzzleResponse;
    use League\OAuth2\Server\AuthorizationServer;
    use Illuminate\Http\Response;
    use Illuminate\Http\Request;
    
    
    $server = app(AuthorizationServer::class);
    
    $psrReponse = $server->respondToAccessTokenRequest((new GuzzleRequest('POST', ''))->withParsedBody([
        'grant_type'    => 'password',
        'client_id'     => '2' // Или какой клиент у вас там за гранты паролей отвечает,
        'client_secret' => '***',
        'username'      => 'god@skies.com',
        'password'      => 'my-very-strong-password',
        'scope'         => '',
    ]), new GuzzleResponse());
    // Можно сразу запросить на вход \Psr\Http\Message\ServerRequestInterface - лара умеет такое инжектить
    // Я накидал его руками - для наглядности
    // Это могут быть любые psr7 совместимые объекты Request и Response, не только Guzzle. 
    // Например Zend\Diactoros (его ижектит лара) тоже подойдет.
    
    // Ну а здесь уже конвертируем ответ в ларовский
    // Ответ будет содержать token_type, access_token, expires_in и refresh_token 
    // expires_in содержит время жизни токена в секундах
    // Например, по умолчанию для одного года это будет 60*60*24*366 = 31622400
    return new Response(
        $psrReponse ->getBody(),
        $psrReponse ->getStatusCode(),
        $psrReponse ->getHeaders()
     );


    Здесь не описана обработка ошибок, так как я предполагаю, что данный сценарий выходит за рамки OAuth спецификации и ответы с ошибками имеют право ей не соответствовать. Это я оставлю на ваше усмотрение.
    Ответ написан
    2 комментария
  • Как реализовать авторизацию по email password в laravel passport?

    greabock
    @greabock
    Могу
    auth()->once($credentials);
    $token = auth()->user()->createToken('Token Name')->accessToken;

    Это если коротко и буквально то, что вы попросили.

    А если правильно, то для этого существует password grant, о котором вы можете прочитать в
    соответствующем разделе документации
    Ответ написан
    Комментировать