여권 OAuth 인증
ㅠㅠ 설치
- 프런트 엔드에서 빠르게 시작하기
- 구성
- 토큰의 유효성
- 재정의 기본 모델
- 액세스 토큰 발급
- 클라이언트 관리
- GET /oauth/clients
- 비밀번호 인증 토큰
- 암시적 인증 토큰
- 클라이언트 자격 증명 인증 토큰
- 개인 액세스 토큰
- 경로 보호
- 토큰 범위
- JavaScript를 사용하여 API에 액세스
- 테스트
- Passport 배포
Laravel Passport
- 소개
- 설치
- 구성
- 액세스 토큰 발급
- 암호 인증 토큰
- 간소화된 인증 토큰
- 클라이언트 인증 토큰
- 개인 액세스 토큰
- 경로 보호
- 액세스 토큰 전달 미들웨어를 통해
- 토큰 범위
- JavaScript Access API 사용
- Event
- Test
소개
Laravel에서는 기존 형식을 기반으로 로그인 및 인증을 구현하는 것이 매우 간단하지만 API 시나리오에서 인증 요구 사항을 충족하는 방법은 무엇입니까? API 시나리오에서 사용자 인증은 일반적으로 요청 간 세션 상태를 유지하는 대신 토큰을 통해 구현됩니다. Laravel 프로젝트에서 Passport를 사용하면 API 인증 인증을 쉽게 구현할 수 있습니다. Passport는 몇 분 안에 애플리케이션에 대한 완전한 OAuth2 서버 구현을 제공할 수 있습니다. Passport는 Andy Millington과 Simon Hamp가 관리하는 League OAuth2 서버를 기반으로 구축되었습니다.
{note} 이 문서에서는 귀하가 OAuth2에 이미 익숙하다고 가정합니다. OAuth2를 모르신다면, 읽기 전에 OAuth2의 공통 용어와 기능을 숙지하시기 바랍니다.
Installation
시작하기 전에 Composer 패키지 관리자를 통해 Passport를 설치하십시오.
composer require laravel/passport
Passport 서비스 제공자는 프레임워크를 사용하여 자체 데이터베이스 마이그레이션 디렉토리를 등록하므로 제공자를 등록한 후에는 Passport의 마이그레이션 명령을 실행하여 클라이언트와 토큰을 저장하는 데이터 테이블을 자동으로 생성합니다.
php artisan migrate
다음으로 passport:install
명령을 실행하여 동시에 보안 액세스 토큰을 생성하는 데 필요한 암호화 키를 생성합니다. , 이 명령은 액세스 토큰 생성을 위한 "개인 액세스" 클라이언트 및 "비밀번호 인증" 클라이언트도 생성합니다. passport:install
命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端:
php artisan passport:install
上面命令执行后,请将 LaravelPassportHasApiTokens
Trait 添加到 AppUser
模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用范围:
<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use HasApiTokens, Notifiable; }
接下来,在 AuthServiceProvider
的 boot
方法中调用 Passport::routes
函数。这个函数会注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由:
<?php namespace App\Providers; use Laravel\Passport\Passport; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider{ /** * 应用程序的策略映射。 * * @var array */ protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; /** * 注册任何认证/授权服务。 * * @return void */ public function boot() { $this->registerPolicies(); Passport::routes(); } }
最后,将配置文件 config/auth.php
中授权看守器 guards
的 api
的 driver
选项改为 passport
。此调整会让你的应用程序在在验证传入的 API 的请求时使用 Passport 的 TokenGuard
来处理:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
自定义迁移
如果你不打算使用 Passport 的默认迁移,你应该在 AppServiceProvider
的 register
方法中调用 Passport::ignoreMigrations
方法。 你可以用这个命令 php artisan vendor:publish --tag=passport-migrations
php artisan vendor:publish --tag=passport-components위 명령을 실행한 후
LaravelPassportHasApiTokens
특성을 에 추가하세요. AppUser
모델인 경우 이 특성은 인증된 사용자의 토큰 및 사용 범위를 확인하기 위한 몇 가지 보조 기능을 모델에 제공합니다. Vue.component( 'passport-clients', require('./components/passport/Clients.vue').default); Vue.component( 'passport-authorized-clients', require('./components/passport/AuthorizedClients.vue').default ); Vue.component( 'passport-personal-access-tokens', require('./components/passport/PersonalAccessTokens.vue').default );Next,
AuthServiceProvider The Passport::routes
함수는 코드>의 boot
메서드에서 호출됩니다. 이 함수는 액세스 토큰을 발급하고 액세스 토큰, 클라이언트 및 개인 액세스 토큰을 취소하는 데 필요한 경로를 등록합니다. <passport-clients></passport-clients>
<passport-authorized-clients></passport-authorized-clients><
passport-personal-access-tokens></passport-personal-access-tokens>
마지막으로 구성 파일 config/auth.php
에 인증 가드를 추가합니다. guards
의 api
드라이버
옵션이 passport
로 변경되었습니다. 이 조정으로 인해 애플리케이션이 들어오는 API 요청을 확인할 때 Passport의 TokenGuard
를 사용하게 됩니다. php artisan passport:keys
사용자 정의 마이그레이션
AppServiceProvider
ignoreMigrations 메서드의 register
메서드에서 Passport::를 호출해야 합니다. php artisan Vendor:publish --tag=passport-migrations
명령을 사용하여 기본 마이그레이션을 내보낼 수 있습니다.
프런트 엔드로 빠르게 시작하세요
{note} Passport의 Vue 구성 요소를 사용하려면 Vue JavaScript 프레임워크를 사용해야 합니다. 이러한 구성 요소는 Bootstrap CSS 프레임워크도 사용합니다. 그러나 이러한 도구를 사용할 계획이 없다면 이러한 구성 요소는 자체 프런트 엔드 구성 요소를 작성하는 데에도 유용합니다.
Passport는 사용자가 클라이언트 및 개인 액세스 토큰을 생성하는 데 사용할 수 있는 일련의 JSON API를 제공합니다. 그러나 이러한 API와 상호 작용하는 프런트 엔드 코드를 작성하는 데는 시간이 많이 걸릴 수 있습니다. 따라서 Passport에는 직접 사용하거나 자체 프런트엔드에 대한 참조로 사용할 수 있는 사전 컴파일된 Vue 구성 요소도 포함되어 있습니다.
Passport의 Vue 구성 요소를 사용하려면 vendor:publish
Artisan 명령을 사용하세요. vendor:publish
Artisan 命令:
/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::loadKeysFrom('/secret-keys/oauth'); }
被发布的组件将会被放到 resources/js/components
目录下。当组件被发布后,你应该在你的 resources/js/app.js
文件中注册它们:
/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::tokensExpireIn(now()->addDays(15)); Passport::refreshTokensExpireIn(now()->addDays(30)); }
{note} 在 Laravel v5.7.19 之前,在注册组件时添加 “.default” 会导致控制台错误。有关此更改的解释,请参阅 Laravel Mix v4.0.0 发布说明.
在注册了组件后,请确保运行 npm run dev
来重新编译你的资源。 当你重编译你的资源后,你可以将组件放到你应用的模板中以开始创建客户端和个人访问令牌:
use App\Models\Passport\Client; use App\Models\Passport\AuthCode; use App\Models\Passport\TokenModel; use App\Models\Passport\PersonalAccessClient; /** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::useClientModel(Client::class); Passport::useTokenModel(TokenModel::class); Passport::useAuthCodeModel(AuthCode::class); Passport::usePersonalAccessClientModel(PersonalAccessClient::class); }
部署 Passport
第一次在你的生产环境部署 Passport 时,你大概需要运行 passport:keys
命令。这个命令生成 Passport 生成访问令牌所需的密钥。生成的密钥一般情况下不应放在版本控制中:
php artisan passport:client
可以使用 Passport::loadKeysFrom
方法来自定义 Passport 密钥的加载路径:
http://example.com/callback,http://examplefoo.com/callback
配置
令牌的有效期
默认情况下,Passport 发放的访问令牌是有一年有效期的。但是如果你想自定义访问令牌的有效期,可以使用 tokensExpireIn
和 refreshTokensExpireIn
方法。上述两个方法同样需要在 AuthServiceProvider
的 boot
方法中调用:
axios.get('/oauth/clients') .then(response => { console.log(response.data); });
覆盖默认模型
可以自由扩展 Passport 使用的模型,通过 Passport
const data = { name: 'Client Name', redirect: 'http://example.com/callback'}; axios.post('/oauth/clients', data) .then(response => { console.log(response.data); }) .catch (response => { // 在response里列出错误详情... });게시된 구성 요소는
resources/js/comComponents
디렉터리에 배치됩니다. 구성 요소가 게시되면 resources/js/app.js
파일에 등록해야 합니다. const data = { name: 'New Client Name', redirect: 'http://example.com/callback'}; axios.put('/oauth/clients/' + clientId, data) .then(response => { console.log(response.data); }) .catch (response => { // 在response里列出错误详情... });{note} Laravel v5.7.19 이전에는 구성 요소를 등록할 때 " .default"를 추가했습니다. 콘솔 오류가 발생합니다. 이 변경 사항에 대한 설명은 Laravel Mix v4.0.0 릴리스 노트 .🎜등록을 참조하세요. 구성요소를 설치한 후
npm run dev
를 실행하여 리소스를 다시 컴파일하세요. 리소스를 다시 컴파일한 후 구성 요소를 앱의 템플릿에 배치하여 클라이언트 및 개인 액세스 토큰 생성을 시작할 수 있습니다. 🎜axios.delete('/oauth/clients/' + clientId) .then(response => { // });🎜🎜🎜
passport:keys
명령을 실행해야 할 수 있습니다. 이 명령은 Passport가 액세스 토큰을 생성하는 데 필요한 키를 생성합니다. 생성된 키는 일반적으로 버전 제어에 배치하면 안 됩니다. 🎜Route::get('/redirect', function () { $query = http_build_query([ 'client_id' => 'client-id', 'redirect_uri' => 'http://example.com/callback', 'response_type' => 'code', 'scope' => '', ]); return redirect('http://your-app.com/oauth/authorize?'.$query); });🎜
Passport::loadKeysFrom
메서드를 사용하여 Passport 키의 로드 경로를 맞춤 설정할 수 있습니다. 🎜php artisan vendor:publish --tag=passport-views🎜 🎜🎜
구성
🎜🎜🎜tokensExpireIn
및 refreshTokensExpireIn
메서드를 사용할 수 있습니다. 위의 두 메서드는 AuthServiceProvider
의 boot
메서드에서도 호출되어야 합니다. 🎜Route::get('/callback', function (Request $request) { $http = new GuzzleHttp\Client; $response = $http->post('http://your-app.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'authorization_code', 'client_id' => 'client-id', 'client_secret' => 'client-secret', 'redirect_uri' => 'http://example.com/callback', 'code' => $request->code, ], ]); return json_decode((string) $response->getBody(), true); });🎜🎜🎜
Passport
클래스 사용자 정의 모델을 통해 기본 모델을 재정의할 수 있습니다. 🎜$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);🎜🎜🎜🎜🎜🎜
액세스 토큰 발급
OAuth2에 익숙한 개발자라면 OAuth2의 핵심이 인증코드라는 점을 꼭 알아야 합니다. 인증 코드를 사용하는 경우 클라이언트 애플리케이션은 사용자를 서버로 리디렉션하고 클라이언트에 대한 액세스 토큰 요청을 승인하거나 거부합니다.
클라이언트 관리
먼저, 애플리케이션 API와 상호 작용해야 하는 애플리케이션을 구축하려면 개발자는 "클라이언트"를 생성하여 애플리케이션을 등록해야 합니다. 일반적으로 여기에는 사용자 애플리케이션 이름과 사용자가 인증 요청을 승인한 후 애플리케이션이 리디렉션될 수 있는 URL 제공이 포함됩니다.
passport:client
명령passport:client
命令
创建客户端最简单的方式是使用 Artisan 命令 passport:client
,你可以使用此命令创建自己的客户端,用于测试你的 OAuth2 的功能。在你执行 client
命令时,Passport 会提示你输入有关客户端的信息,最终会给你提供客户端的 ID 和 密钥:
php artisan passport:client --password
Redirect URLs
当有多个重定向 URL 白名单时,可以在 passport:client
命令提示输入 URL 时,使用逗号分隔来指定:
$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);
{note} 任何包含逗号的 URL 都必须进行编码。
JSON API
考虑到你的用户无法使用 client 命令,Passport 为此提供了可用于创建「客户端」的 JSON API。这样你就不用再花时间编写控制器来创建、更新和删除客户端。
然而,你仍旧需要基于 Passport 的 JSON API 开发一套前端界面,为你的用户提供管理客户端的面板。下面我们会列出所有用于管理客户端的 API,为了方便起见,我们使用 Axios 来演示对端口发出 HTTP 请求。
这个 JSON API 由 web
和 auth
两个中间件保护,所以只能从应用程序中调用,不能从外部调用。
{tip} 如果你不想自己实现整个客户端管理的前端界面,可以使用 前端快速上手 在几分钟内组建一套功能齐全的前端界面。
GET /oauth/clients
클라이언트를 생성하는 가장 쉬운 방법은 Artisan 명령 passport:client
를 사용하는 것입니다. 이 명령을 사용하여 클라이언트를 생성할 수 있습니다. OAuth2 기능을 테스트하는 데 사용되는 자체 클라이언트입니다. client
명령을 실행하면 Passport는 클라이언트에 대한 정보를 묻는 메시지를 표시하고 결국 클라이언트의 ID와 비밀번호를 제공합니다: $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' => '*', ], ]);리디렉션 URL 리디렉션 URL 허용 목록이 여러 개인 경우
passport:client
명령이 URL을 묻는 메시지를 표시할 때 쉼표 구분을 사용하여 지정할 수 있습니다.🎜<?php namespace App; use Laravel\Passport\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use HasApiTokens, Notifiable; /** * 通过用户名找到对应的用户信息 * * @param string $username * @return \App\User */ public function findForPassport($username) { return $this->where('username', $username)->first(); } }
🎜{note} 쉼표가 포함된 모든 URL은 인코딩이 필요합니다. 🎜
web
과 auth
라는 두 가지 미들웨어로 보호되므로 애플리케이션에서만 호출할 수 있고 외부에서는 호출할 수 없습니다. 🎜🎜{tip} 전체 클라이언트 관리 프런트 엔드 인터페이스를 직접 구현하고 싶지 않다면 를 사용하여 빠르게 시작🎜하여 완전한 기능을 갖춘 인터페이스를 구축할 수 있습니다. 몇 분 안에 프런트엔드 인터페이스를 구현합니다. 🎜
GET /oauth/clients
🎜🎜이 경로는 인증된 사용자의 모든 클라이언트를 반환합니다. 주요 용도는 모든 사용자의 클라이언트를 나열하여 편집하거나 삭제할 수 있도록 하는 것입니다. 🎜/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::enableImplicitGrant(); }🎜🎜
POST /oauth/clients
이 경로는 새 클라이언트를 생성하는 데 사용됩니다. 여기에는 클라이언트 이름 name
과 사후 인증 콜백 URL redirect
라는 두 가지 매개변수가 필요합니다. 인증 요청을 승인하거나 거부한 후 사용자는 redirect
매개변수가 제공하는 링크로 리디렉션됩니다. POST /oauth/clients
此路由用于创建新客户端。它需要两个参数:客户端的名称 name
和授权后回调的 URL redirect
。在批准或拒绝授权请求后,用户会被重定向到 redirect
参数提供的链接。
当客户端创建后,会返回客户端的 ID 和密钥。客户端可以使用这两个值从你的授权服务请求访问令牌 (Access token) 。该路由会返回新的客户端实例:
Route::get('/redirect', function () { $query = http_build_query([ 'client_id' => 'client-id', 'redirect_uri' => 'http://example.com/callback', 'response_type' => 'token', 'scope' => '', ]); return redirect('http://your-app.com/oauth/authorize?'.$query); });
PUT /oauth/clients/{client-id}
此路由用于更新客户端信息。它需要两个参数:客户端的名称 name
和授权后回调的 URL redirect
。在批准或拒绝授权请求后,用户会被重定向 redirect
到这个链接。此路由会返回更新后的客户端实例:
php artisan passport:client --client
DELETE /oauth/clients/{client-id}
此路由用于删除客户端 (client):
use Laravel\Passport\Http\Middleware\CheckClientCredentials; protected $routeMiddleware = [ 'client' => CheckClientCredentials::class, ];
请求令牌
授权时的重定向
客户端创建之后,开发者会使用此客户端的 ID 和密钥来请求授权代码,并从应用程序访问令牌。首先,接入应用的用户向你应用程序的 /oauth/authorize
路由发出重定向请求,示例如下:
Route::get('/orders', function (Request $request) { ... })->middleware('client');
{tip} 注意,路由
/oauth/authorize
已经在Passport::routes
方法中定义。你不需要手动定义此路由。
批准请求
接收到授权请求时,Passport 会自动向用户显示一个模版页面,允许用户批准或拒绝授权请求。如果用户批准请求,他们会被重定向回接入的应用程序指定的 redirect_uri
。redirect_uri
必须和客户端创建时指定的 redirect
链接完全一致。
如果你想自定义授权确认页面,可以使用 Artisan 命令 vendor:publish
发布 Passport 的视图。发布后的视图文件存放在 resources/views/vendor/passport
클라이언트가 생성되면 클라이언트의 ID와 키가 반환됩니다. 클라이언트는 이 두 값을 사용하여 인증 서비스에 액세스 토큰을 요청할 수 있습니다. 이 경로는 새 클라이언트 인스턴스를 반환합니다:
Route::get('/orders', function (Request $request) { ... })->middleware('client:check-status,your-scope');
PUT /oauth/clients/{client-id}
이 경로는 클라이언트 정보를 업데이트하는 데 사용됩니다. 여기에는 클라이언트 이름 name
과 사후 인증 콜백 URL redirect
라는 두 가지 매개변수가 필요합니다. 승인 요청을 승인하거나 거부하면 사용자는 이 링크로 리디렉션
됩니다. 이 경로는 업데이트된 클라이언트 인스턴스를 반환합니다: 🎜
$guzzle = new GuzzleHttp\Client; $response = $guzzle->post('http://your-app.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'client_credentials', 'client_id' => 'client-id', 'client_secret' => 'client-secret', 'scope' => 'your-scope', ],]); return json_decode((string) $response->getBody(), true)['access_token'];
DELETE /oauth/clients/{client-id}
h4>< p>이 경로는 클라이언트를 삭제하는 데 사용됩니다: 🎜php artisan passport:client --personal
요청 토큰
클라이언트 생성 후 개발자는 이 클라이언트의 ID와 비밀번호를 사용합니다. 애플리케이션에서 인증 코드와 액세스 토큰을 요청합니다. 먼저 애플리케이션에 액세스하는 사용자는 애플리케이션의 /oauth/authorize
경로로 리디렉션 요청을 보냅니다. 예시는 다음과 같습니다. 🎜
/** * 注册认证 / 授权服务 * * @return void */ public function boot(){ $this->registerPolicies(); Passport::routes(); Passport::personalAccessClientId('client-id'); }
{tip} 경로에 유의하세요.
/oauth/authorize
가Passport::routes
메소드에 정의되었습니다. 이 경로를 수동으로 정의할 필요는 없습니다. 🎜
승인 요청을 받으면 Passport는 자동으로 사용자에게 템플릿 페이지를 표시하여 사용자는 인증 요청을 승인하거나 거부할 수 있습니다. 사용자가 요청을 승인하면 액세스하는 애플리케이션에서 지정한 redirect_uri
로 다시 리디렉션됩니다. redirect_uri
는 클라이언트가 생성될 때 지정된 redirect
링크와 정확히 동일해야 합니다. 🎜
인증 확인 페이지를 사용자 정의하려면 Artisan 명령 vendor:publish
를 사용하여 Passport 보기를 게시할 수 있습니다. 게시된 보기 파일은 resources/views/vendor/passport
에 저장됩니다: 🎜
$user = App\User::find(1); // 创建没有作用域的访问令牌... $token = $user->createToken('Token Name')->accessToken; // 创建有作用域的访问令牌... $token = $user->createToken('My Token', ['place-orders'])->accessToken;🎜🎜
인증 코드를 액세스 토큰으로 변환
사용자가 인증 요청을 승인하면 액세스된 애플리케이션으로 다시 리디렉션됩니다. 그런 다음 액세스하는 애플리케이션은 POST
요청을 통해 애플리케이션에서 액세스 토큰을 요청해야 합니다. 요청에는 사용자가 승인 요청을 승인할 때 애플리케이션에서 발급한 승인 코드가 포함되어야 합니다. 다음 예에서는 Guzzle HTTP 라이브러리를 사용하여 이 POST
요청을 구현합니다. POST
请求向你的应用程序申请访问令牌。请求应该包括当用户批准授权请求时由应用程序发出的授权码。在下面的例子中,我们使用 Guzzle HTTP 库来实现这次 POST
请求:
axios.get('/oauth/scopes') .then(response => { console.log(response.data); });
路由 /oauth/token
返回的 JSON 响应中会包含 access_token
、refresh_token
和 expires_in
属性。expires_in
属性包含访问令牌的有效期(单位:秒)。
{tip} 像
/oauth/authorize
路由一样,/oauth/token
路由在Passport::routes
方法中定义了,你没必要手动去定义它。默认情况下,此路由使用 “ThrottleRequests” 中间件的设置进行限流。
刷新令牌
如果你的应用程序发放了短期的访问令牌,用户将需要通过在发出访问令牌时提供给他们的刷新令牌来刷新其访问令牌。在下面的例子中,我们使用 Guzzle HTTP 库来刷新令牌:
axios.get('/oauth/personal-access-tokens') .then(response => { console.log(response.data); });
路由 /oauth/token
会返回一个 JSON 响应,其中包含 access_token
、refresh_token
和 expires_in
属性。expires_in
属性包含访问令牌的有效时间(单位:秒)。
密码授权令牌
OAuth2 密码授权机制可以让你自己的客户端(如移动应用程序)使用邮箱地址或者用户名和密码获取访问令牌。如此一来你就可以安全地向自己的客户端发出访问令牌,而不需要遍历整个 OAuth2 授权代码重定向流程
创建密码授权客户端
在应用程序通过密码授权机制来发布令牌之前,在 passport:client
命令后加上 --password
参数来创建密码授权的客户端。如果你已经运行了 passport:install
const data = { name: 'Token Name', scopes: []}; axios.post('/oauth/personal-access-tokens', data) .then(response => { console.log(response.data.accessToken); }) .catch (response => { // 列出响应中错误... });Route
/oauth/token
반환된 JSON 응답에는 access_token<이 포함됩니다. /code>, refresh_token
및 expires_in
속성. expires_in
속성에는 액세스 토큰의 만료 날짜(초)가 포함됩니다. {tip} /oauth/authorize
경로와 마찬가지로 /oauth/token
경로는 Passport::routes
메소드를 사용하면 수동으로 정의할 필요가 없습니다. 기본적으로 이 경로는 조절을 위해 "ThrottleRequests" 미들웨어 설정을 사용합니다.
🎜새로고침 토큰
🎜앱이 짧은 경우- 라이브 액세스 토큰이 발급되고 사용자는 액세스 토큰이 발급될 때 제공된 새로 고침 토큰을 통해 액세스 토큰을 새로 고쳐야 합니다. 다음 예에서는 Guzzle HTTP 라이브러리를 사용하여 토큰을 새로 고칩니다. 🎜axios.delete('/oauth/personal-access-tokens/' + tokenId);
🎜 /oauth/token
경로는 access_token
, 를 포함하는 JSON 응답을 반환합니다. 새로고침_토큰
및 expires_in
속성. expires_in
속성에는 액세스 토큰의 만료 시간(초)이 포함됩니다. 🎜🎜🎜🎜🎜비밀번호 부여 토큰
🎜OAuth2 비밀번호 부여 메커니즘을 통해 클라이언트(예: 모바일 앱)는 이메일 주소 또는 사용자 이름과 비밀번호를 사용하여 액세스 토큰을 얻습니다. 이렇게 하면 전체 OAuth2 인증 코드 리디렉션 프로세스를 거치지 않고도 자신의 클라이언트에 액세스 토큰을 안전하게 발급할 수 있습니다🎜🎜🎜🎜< div name="49cdea " data-unique="49cdea">🎜비밀번호 인증 클라이언트 생성
🎜애플리케이션이 비밀번호 인증 메커니즘을 통해 토큰을 발급하기 전에 passport:client에서 --를 추가합니다. 비밀번호 인증 클라이언트를 생성하려면 code> 명령 뒤에 비밀번호
매개변수를 추가하세요. passport:install
명령을 이미 실행한 경우에는 이 명령을 다시 실행할 필요가 없습니다: 🎜Route::get('/user', function () {
//
})->middleware('auth:api');
🎜🎜🎜🎜🎜🎜토큰 요청
비밀번호 부여 클라이언트를 생성하면 사용자의 이메일 주소를 사용하여 /oauth/token
경로에 POST
요청을 하여 액세스 권한을 얻을 수 있습니다. 및 비밀번호 토큰. 이 경로는 Passport::routes
메서드에 의해 이미 등록되었으므로 수동으로 정의할 필요가 없습니다. 요청이 성공하면 서버가 반환한 JSON 응답에서 access_token
및 refresh_token
을 받게 됩니다. /oauth/token
路由发出 POST
请求来获取访问令牌。而该路由已经由 Passport::routes
方法注册,因此不需要手动定义它。如果请求成功,会在服务端返回的 JSON 响应中收到一个 access_token
和 refresh_token
:
$response = $client->request('GET', '/api/user', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$accessToken,
],
]);
{tip} 默认情况下,访问令牌是长期有效的。你可以根据需要 配置访问令牌的有效时间 。
请求所有作用域
使用密码授权机制时,可以通过请求 scope 参数 *
来授权应用程序支持的所有范围的令牌。如果你的请求中包含 scope 为 *
的参数,令牌实例上的 can
方法会始终返回 true
。这种作用域的授权只能分配给使用 password
授权时发出的令牌:
use Laravel\Passport\Passport;
Passport::tokensCan([
'place-orders' => 'Place orders',
'check-status' => 'Check order status',
]);
自定义用户名字段
当使用密码授权时,Passport 默认使用 email
作为「用户名」。但是,你可以通过在模型上定义一个 findForPassport
方法来自定义用户名字段:
use Laravel\Passport\Passport;Passport::setDefaultScope([
'check-status',
'place-orders',
]);
隐式授权令牌
隐式授权类似于授权码授权,但是它只将令牌返回给客户端而不交换授权码。这种授权最常用于无法安全存储客户端凭据的 JavaScript 或移动应用程序。通过调用 AuthServiceProvider
中的 enableImplicitGrant
方法来启用这种授权:
Route::get('/redirect', function () {
$query = http_build_query([
'client_id' => 'client-id',
'redirect_uri' => 'http://example.com/callback',
'response_type' => 'code',
'scope' => 'place-orders check-status',
]);
return redirect('http://your-app.com/oauth/authorize?'.$query);});
调用上面方法开启授权后,开发者可以使用他们的客户端 ID 从应用程序请求访问令牌。接入的应用程序应该向你的应用程序的 /oauth/authorize
路由发出重定向请求,如下所示:
$token = $user->createToken('My Token', ['place-orders'])->accessToken;
{tip} 注意,/oauth/authorize
路由已经在 Passport::routes
'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class,
'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class,
{tip} 기본적으로 액세스 토큰 장기적으로 효과적입니다. 필요에 따라 액세스 토큰의 유효 시간을 구성
할 수 있습니다. 🎜모든 범위 요청🎜🎜비밀번호 인증 메커니즘을 사용할 때 범위를 요청할 수 있습니다. 매개변수 *
를 사용하여 애플리케이션에서 지원하는 모든 범위의 토큰을 승인합니다. 요청에 *
범위의 매개변수가 포함된 경우 토큰 인스턴스의 can
메서드는 항상 true
를 반환합니다. 이 범위의 인증은 password
인증을 사용할 때 발행된 토큰에만 할당될 수 있습니다. 🎜Route::get('/orders', function () {
// Access token has both "check-status" and "place-orders" scopes...
})->middleware('scopes:check-status,place-orders');
🎜🎜🎜🎜🎜사용자 정의 사용자 이름 필드🎜🎜비밀번호 인증을 사용할 때 Passport는 기본적으로 이메일
을 "사용자 이름"으로 사용합니다. 그러나 모델에서 findForPassport
메소드를 정의하여 사용자 이름 필드를 사용자 정의할 수 있습니다: 🎜Route::get('/orders', function () {
// 访问令牌具有 "check-status" 或 "place-orders" 作用域...
})->middleware('scope:check-status,place-orders');
🎜🎜🎜🎜암시적 인증 토큰
🎜암시적 인증은 인증 코드 인증과 유사하지만 인증 코드를 교환하지 않고 클라이언트에 토큰만 반환합니다. 이 인증은 클라이언트 자격 증명을 안전하게 저장할 수 없는 JavaScript 또는 모바일 애플리케이션에 가장 일반적으로 사용됩니다. AuthServiceProvider
에서 enableImplicitGrant
메소드를 호출하여 이 인증을 활성화합니다. 🎜use Illuminate\Http\Request;
Route::get('/orders', function (Request $request) {
if ($request->user()->tokenCan('place-orders')) {
//
}
});
🎜위 메소드를 호출하여 인증을 활성화한 후 개발자는 클라이언트 ID를 사용하여 애플리케이션 액세스 토큰에서 요청할 수 있습니다. . 연결된 애플리케이션은 아래와 같이 애플리케이션의 /oauth/authorize
경로로 리디렉션 요청을 해야 합니다. 🎜Laravel\Passport\Passport::scopeIds();
🎜{tip} 참고, /oauth/ 승인
경로는 Passport::routes
메서드에 이미 정의되어 있으므로 이 경로를 수동으로 다시 정의할 필요가 없습니다. 🎜🎜🎜🎜🎜🎜🎜🎜클라이언트 자격 증명 부여 토큰
클라이언트 자격 증명 부여는 기계 간 인증에 적합합니다. 예를 들어, 이 권한을 사용하여 API를 통해 유지 관리 작업을 수행할 수 있습니다.
클라이언트 자격 증명 인증 전에 클라이언트 자격 증명 인증 클라이언트를 생성해야 합니다. passport:client
명령의 --client
매개 변수를 사용하여 다음을 생성할 수 있습니다. passport:client
命令的 --client
参数来创建:
Laravel\Passport\Passport::scopes();
接下来,要使用这种授权,你首先需要在 app/Http/Kernel.php
的 $routeMiddleware
变量中添加新的中间件:
Laravel\Passport\Passport::scopesFor(['place-orders', 'check-status']);
然后,在路由上追加这个中间件:
Laravel\Passport\Passport::hasScope('place-orders');
若要将对路由的访问限制在某个作用域内,可在将 client
中间件附加到路由时提供以逗号分隔的所需作用域列表:
'web' => [
// 其他中间件...
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
获取令牌
通过向 oauth/token
接口发出请求来获取令牌:
axios.get('/api/user')
.then(response => {
console.log(response.data);
});
个人访问令牌
有时候,用户要在不经过传统的授权码重定向流程的情况下向自己发出访问令牌。允许用户通过应用程序用户界面对自己发出令牌,有助于用户体验你的 API,或者也可以将其作为一种更简单的发布访问令牌的方式。
{note} 个人访问令牌是永久有效的,就算使用了 tokensExpireIn
和 refreshTokensExpireIn
方法也不会修改它的生命周期。
创建个人访问客户端
在你的应用程序发布个人访问令牌之前,你需要在 passport:client
命令后带上 --personal
参数来创建对应的客户端。如果你已经运行了 passport:install
命令,则无需再运行此命令:
/**
* 注册认证 / 授权服务
*
* @return void
*/
public function boot(){
$this->registerPolicies();
Passport::routes();
Passport::cookie('custom_name');
}
如果你已经创建了个人访问客户端,你可以通过调用 AuthServiceProvider
中的 personalAccessClientId
方法来启用:
// In your application layout...
<meta name="csrf-token" content="{{ csrf_token() }}">
// Laravel's JavaScript scaffolding...
window.axios.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest',
};
管理个人访问令牌
创建个人访问客户端后,你可以使用 User
模型实例上的 createToken
方法来为给定用户发布令牌。createToken
/**
* 应用程序事件监听映射
*
* @var array
*/
protected $listen = [
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\RevokeOldTokens',
],
'Laravel\Passport\Events\RefreshTokenCreated' => [
'App\Listeners\PruneOldTokens',
],
];
다음으로, 이 인증을 사용하려면 먼저 app/Http/Kernel.php
의 $routeMiddleware
변수에 새 미들웨어를 추가해야 합니다. use App\User;
use Laravel\Passport\Passport;
public function testServerCreation(){
Passport::actingAs(
factory(User::class)->create(),
['create-servers']
);
$response = $this->post('/api/create-server');
$response->assertStatus(201);
}
그런 다음 추가하세요. 경로에 대한 이 미들웨어: rrreee 경로에 대한 액세스를 특정 범위로 제한하려면 쉼표로 구분된 필수 범위 목록을 제공하세요: 🎜rrreee🎜 토큰 받기
🎜oauth/token
인터페이스에 요청하여 토큰을 얻으려면:🎜rrreee🎜🎜🎜🎜🎜개인 액세스 토큰🎜🎜때때로 사용자는 기존 인증 코드 리디렉션 프로세스를 거치지 않고 자신에게 액세스 토큰을 발급하고 싶어합니다. 사용자가 애플리케이션 UI를 통해 자신에게 토큰을 발행하도록 허용하면 사용자가 API를 경험하는 데 도움이 되거나 액세스 토큰을 발행하는 더 간단한 방법으로 사용될 수 있습니다. 🎜🎜{note} 개인 액세스 토큰은 영구적으로 유효하며 tokensExpireIn
및 refreshTokensExpireIn
메서드를 사용해도 수명 주기가 수정되지 않습니다. 🎜
🎜🎜🎜🎜개인 액세스 클라이언트 생성🎜애플리케이션이 개인 액세스 토큰을 발급하기 전에 passport:client
명령 뒤에 --personal
매개변수를 사용하여 해당 클라이언트를 생성해야 합니다. passport:install
명령을 이미 실행한 경우에는 이 명령을 다시 실행할 필요가 없습니다. 🎜rrreee🎜이미 개인 액세스 클라이언트를 생성한 경우 를 호출하여 이 작업을 수행할 수 있습니다. >AuthServiceProvider
활성화할 personalAccessClientId
메서드: 🎜rrreee🎜🎜🎜🎜개인 액세스 토큰 관리
🎜개인 액세스 클라이언트를 생성한 후 User
모델 인스턴스에서 createToken
메서드를 사용하여 발급할 수 있습니다. 특정 사용자에 대한 토큰입니다. createToken
메소드는 토큰 이름을 첫 번째 매개변수로 받아들이고 선택적 🎜scope🎜 배열을 두 번째 매개변수로 받아들입니다: 🎜rrreee🎜🎜JSON API
Passport에는 개인 액세스 토큰 관리를 위한 JSON API도 있으며 이를 자체 프런트 엔드와 연결하여 사용자에게 개인 액세스 토큰 관리를 위한 대시보드를 제공할 수 있습니다. 아래에서는 개인 액세스 토큰을 관리하기 위한 모든 API 인터페이스를 설명합니다. 편의를 위해 Axios를 사용하여 API 인터페이스에 대한 HTTP 요청을 만드는 방법을 보여줍니다.
JSON API는 web
및 auth
미들웨어로 보호되므로 자신의 애플리케이션에서만 호출할 수 있습니다. 외부 소스에서는 호출할 수 없습니다. web
和 auth
中间件保护;因此,只能从您自己的应用程序中调用它。无法从外部源调用它。
{tip} 如果你不想实现自己的个人访问令牌管理的前端界面,可以根据 前端快速上手 在几分钟内组建功能齐全的前端界面。
GET /oauth/scopes
此路由会返回应用程序中定义的所有 作用域。你可以使用此路由列出用户可能分配给个人访问令牌的范围:
rrreeeGET /oauth/personal-access-tokens
此路由返回认证用户创建的所有个人访问令牌。这主要用于列出所有用户的令牌,以便他们可以编辑或删除它们:
rrreeePOST /oauth/personal-access-tokens
此路由用于创建新的个人访问令牌。它需要两个数据:令牌的 name
和 scpoe
:
rrreeeDELETE /oauth/personal-access-tokens/{token-id}
此路由可用于删除个人访问令牌:
rrreee路由保护
通过中间件
Passport 包含一个 验证保护机制 可以验证请求中传入的访问令牌。配置 api
的看守器使用 passport
驱动程序后,只需要在需要有效访问令牌的任何路由上指定 auth:api
中间件:
rrreee传递访问令牌
当调用 Passport 保护下的路由时,接入的 API 应用需要将访问令牌作为 Bearer
令牌放在请求头 Authorization
{tip} 개인 액세스 토큰 관리를 위해 자체 프런트엔드 인터페이스를 구현하고 싶지 않다면 프런트엔드 빠른 시작
GET /oauth/scopes
이 경로는 모든 범위🎜. 이 경로를 사용하여 사용자에게 개인 액세스 토큰에 할당할 수 있는 범위를 나열할 수 있습니다. 🎜rrreee🎜🎜GET /oauth/personal-access- 토큰< /code>🎜🎜이 경로는 인증된 사용자가 생성한 모든 개인 액세스 토큰을 반환합니다. 이는 주로 모든 사용자의 토큰을 나열하여 사용자가 편집하거나 삭제할 수 있도록 하는 데 사용됩니다. 🎜rrreee🎜🎜POST /oauth/personal-access- tokens< /code>🎜🎜이 경로는 새로운 개인 액세스 토큰을 생성하는 데 사용됩니다. 토큰의 name
및 scpoe
라는 두 가지 데이터가 필요합니다. 🎜rrreee🎜🎜DELETE /oauth/personal-access-tokens/{token-id}
🎜🎜이 경로는 개인 액세스 토큰을 삭제하는 데 사용할 수 있습니다: 🎜rrreee🎜🎜🎜🎜경로 보호
🎜🎜🎜🎜 < h3>미들웨어를 통해🎜Passport에는 요청에 전달된 액세스 토큰을 확인할 수 있는 인증 보호 메커니즘이 포함되어 있습니다. passport
드라이버를 사용하도록 api
의 감시자를 구성한 후 유효한 경로가 필요한 모든 경로에서 auth:api
미들웨어만 지정하면 됩니다. 액세스 토큰 : 🎜rrreee🎜🎜🎜🎜액세스 토큰 전달
🎜 호출 시 Passport 보호 하에 라우팅할 때 액세스된 API 애플리케이션은 액세스 토큰을 요청 헤더 Authorization
에 Bearer
토큰으로 넣어야 합니다. 예를 들어 Guzzle HTTP 라이브러리를 사용하는 경우: 🎜rrreee🎜🎜🎜🎜🎜🎜토큰 범위
범위를 사용하면 API 클라이언트가 계정 승인을 요청할 때 특정 권한을 요청할 수 있습니다. 예를 들어, 전자 상거래 애플리케이션을 구축하는 경우 이에 연결된 모든 API 애플리케이션에 주문 기능이 필요한 것은 아닙니다. 연결된 API 애플리케이션이 주문 배송 상태에 액세스할 수 있는 권한만 부여하도록 허용할 수 있습니다. 즉, 범위 지정을 통해 애플리케이션 사용자는 타사 애플리케이션이 수행할 수 있는 작업을 제한할 수 있습니다.
범위 정의
AuthServiceProvider
의 boot
메서드에서 Passport::tokensCan
메서드를 사용하여 다음을 수행할 수 있습니다. 정의 API의 범위입니다. tokensCan
메소드는 범위 이름과 설명이 포함된 배열을 매개변수로 허용합니다. 범위 설명은 인증 확인 페이지에서 사용자에게 직접 표시됩니다. AuthServiceProvider
的 boot
方法中使用 Passport::tokensCan
方法来定义 API 的作用域。tokensCan
方法接受一个包含作用域名称和描述的数组作为参数。作用域描述将会在授权确认页中直接展示给用户,你可以将其定义为任何你需要的内容:
rrreee默认作用域
如果客户端没有请求任何特定的范围,你可以在 AuthServiceProvider
的 boot
方法中使用 Passport::setDefaultScope
方法来定义默认的作用域。
rrreee给令牌分配作用域
请求授权码
使用授权码请求访问令牌时,接入的应用需为 scope
参数指定所需作用域。 scope
参数包含多个作用域时,名称之间使用空格分割:
rrreee分发个人访问令牌
使用 User
模型的 createToken
方法发放个人访问令牌时,可以将所需作用域的数组作为第二个参数传给此方法:
rrreee检查作用域
Passport 包含两个中间件,可用于验证传入的请求是否包含访问指定作用域的令牌。 使用之前,需要将下面的中间件添加到 app/Http/Kernel.php
文件的 $routeMiddleware
属性中:
rrreee检查所有作用域
路由可以使用 scopes
中间件来检查当前请求是否拥有指定的 所有 作用域:
rrreee检查任意作用域
기본 범위🎜🎜클라이언트가 특정 범위를 요청하지 않는 경우 AuthServiceProvider
Passport의 boot
메서드에서 를 사용할 수 있습니다. setDefaultScope
메소드를 사용하여 기본 범위를 정의합니다. 🎜rrreee🎜🎜🎜🎜🎜토큰에 범위 할당🎜🎜인증 코드 요청
🎜인증 코드를 사용하여 액세스 토큰을 요청할 때 연결된 애플리케이션은 scope
매개변수에 필요한 범위를 지정해야 합니다. scope
매개변수에 여러 범위가 포함된 경우 공백을 사용하여 이름을 구분하세요. 🎜rrreee🎜개인 액세스 토큰 배포
🎜User
모델의 createToken
메소드를 사용하여 개인 액세스 토큰을 발행할 때 필요한 범위의 배열을 이 메소드의 두 번째 매개변수로 전달할 수 있습니다. 🎜 rrreee🎜🎜🎜🎜🎜Checkingscopes🎜🎜Passport에는 들어오는 요청을 검증하는 데 사용할 수 있는 두 개의 미들웨어가 포함되어 있습니다. 지정된 범위에 액세스하기 위한 토큰입니다. 사용하기 전에 app/Http/Kernel.php
파일의 $routeMiddleware
속성에 다음 미들웨어를 추가해야 합니다: 🎜rrreee🎜모든 범위 확인
🎜Routes는 scopes
미들웨어를 사용하여 현재 요청에 지정된 🎜all🎜 범위가 있는지 확인할 수 있습니다: 🎜rrreee🎜범위 확인
🎜라우트는 scope
미들웨어를 사용하여 현재 요청에 지정된 🎜any가 있는지 확인할 수 있습니다. 🎜 범위: 🎜rrreee🎜🎜토큰 인스턴스의 범위를 확인하세요
액세스 토큰 확인이 포함된 요청이 애플리케이션에 의해 인증된 경우에도 현재 승인된 User
에서 tokenCan
를 계속 사용할 수 있습니다. 인스턴스 > 토큰에 지정된 범위가 있는지 확인하는 메서드: User
实例上的 tokenCan
方法来验证令牌是否拥有指定的作用域:
rrreee附加作用域方法
scopeIds
方法将返回所有已定义 ID / 名称的数组:
rrreeescopes
方法将返回一个 包含所有已定义作用域数组的 LaravelPassportScope
实例:
rrreeescopesFor
方法将返回与给定 ID / 名称匹配的 LaravelPassportScope
实例数组:
rrreee你可以使用 hasScope
方法确定是否已定义给定作用域:
rrreee使用 JavaScript 接入 API
在构建 API 时, 如果能通过 JavaScript 应用接入自己的 API 将会给开发过程带来极大的便利。这种 API 开发方法允许你使用自己的应用程序的 API 和别人共享的 API 。你的 Web 应用程序、移动应用程序、第三方应用程序以及可能在各种软件包管理器上发布的任何 SDK 都可能会使用相同的 API 。
通常,如果要在 JavaScript 应用程序中使用 API ,需要手动向应用程序发送访问令牌,并将其传递给应用程序。但是, Passport 有一个可以处理这个问题的中间件。将 CreateFreshApiToken
中间件添加到 app/Http/Kernel.php
文件中的 web
中间件组就可以了:
rrreee{note} 你应该确保在您的中间件堆栈中 CreateFreshApiToken
中间件之前列出了 EncryptCookies
中间件。
这个 Passport 中间件将在你所有的对外请求中添加一个 laravel_token
cookie 。该 cookie 将包含一个加密后的 JWT , Passport 将用来验证来自 JavaScript 应用程序的 API 请求。至此,你可以在不明确传递访问令牌的情况下向应用程序的 API 发出请求:
rrreee自定义 Cookie 名称
如果需要,你可以在 AuthServiceProvider
的 boot
方法中使用 Passport::cookie
方法来自定义 laravel_token
cookie 的名称。
rrreeeCSRF 保护
当使用这种授权方法时,默认的 Laravel JavaScript 脚手架会让 Axios 发送 X-CSRF-TOKEN
和 X-Requested-With
rrreee
추가 범위 메서드scopeIds
메서드는 모든 배열을 반환합니다. 정의된 ID/이름:
rrreeescopes
이 메소드는 정의된 모든 범위의 배열을 포함하는 LaravelPassportScope
인스턴스를 반환합니다: rrreee🎜scopesFor code> 메소드는 주어진 ID/이름과 일치하는 LaravelPassportScope
인스턴스의 배열을 반환합니다: 🎜rrreee🎜 hasScope
메소드를 사용하여 주어진 범위가 정의되었는지 확인할 수 있습니다: 🎜rrreee 🎜🎜🎜🎜JavaScript를 사용하여 API에 액세스
🎜Building API, JavaScript 애플리케이션을 통해 자신의 API에 접근할 수 있다면 개발 과정에 큰 편리함을 가져다 줄 것입니다. API 개발에 대한 이러한 접근 방식을 통해 자신의 애플리케이션의 API와 다른 사람의 공유 API를 사용할 수 있습니다. 웹 앱, 모바일 앱, 타사 앱 및 다양한 패키지 관리자에 게시할 수 있는 SDK는 동일한 API를 사용할 가능성이 높습니다. 🎜🎜일반적으로 JavaScript 애플리케이션에서 API를 사용하려면 액세스 토큰을 수동으로 전송하여 애플리케이션에 전달해야 합니다. 하지만 Passport에는 이 문제를 처리하는 미들웨어가 있습니다. app/Http/Kernel.php
파일의 web
미들웨어 그룹에 CreateFreshApiToken
미들웨어를 추가하기만 하면 됩니다. 🎜rrreee 🎜{note } EncryptCookies
미들웨어가 미들웨어 스택의 CreateFreshApiToken
미들웨어 앞에 나열되어 있는지 확인해야 합니다. 🎜
🎜이 Passport 미들웨어는 모든 아웃바운드 요청에 laravel_token
쿠키를 추가합니다. 이 쿠키에는 Passport가 JavaScript 애플리케이션의 API 요청을 인증하는 데 사용할 암호화된 JWT가 포함됩니다. 이 시점에서 액세스 토큰을 명시적으로 전달하지 않고도 애플리케이션의 API에 요청할 수 있습니다: 🎜rrreee🎜🎜Custom Cookie Name🎜🎜필요한 경우 다음을 사용할 수 있습니다. AuthServiceProvider
의 boot
메소드에 있는 Passport::cookie
메소드를 사용하여 laravel_token
쿠키의 이름을 사용자 정의합니다. 🎜rrreee🎜🎜CSRF Protection🎜🎜이 인증 방법을 사용하면 기본 Laravel JavaScript 스캐폴딩으로 인해 Axios가 X-CSRF-TOKEN 코드를 보내게 됩니다. > 및 X-Requested-With
요청 헤더. 또한 CSRF 토큰이 HTML 메타 태그에 포함되어 있는지 확인해야 합니다. 🎜rrreee🎜🎜🎜🎜🎜🎜Events
Passport는 액세스 토큰과 새로 고침 토큰이 발행되면 이벤트를 발생시킵니다. 애플리케이션의 EventServiceProvider
에서 이러한 이벤트에 대한 리스너를 추가하고 리스너의 다른 토큰을 취소하거나 수정할 수 있습니다. EventServiceProvider
中为这些事件追加监听器,并在监听器中撤销或修改其他令牌:
rrreee测试
Passport 的 actingAs
方法可以指定当前已认证用户及其作用域。actingAs
rrreee
🎜Passport의 actingAs
메소드는 현재 인증된 사용자와 해당 범위를 지정할 수 있습니다. actingAs
메소드의 첫 번째 매개변수는 사용자 인스턴스이고, 두 번째 매개변수는 사용자 토큰 범위 배열입니다. 🎜rrreee🎜이 글은 🎜LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜