dennisharrison / laravel-auth0
Auth0 Laravel SDK。提供直接且经过测试的方法来实现身份验证,并访问Auth0的管理API端点。
Requires
- php: ^8.0
- ext-json: *
- ext-mbstring: *
- auth0/auth0-php: ^8.3.4
- illuminate/contracts: ^8.0 || ^9.0 || ^10.0
- illuminate/http: ^8.0 || ^9.0 || ^10.0
- illuminate/support: ^8.0 || ^9.0 || ^10.0
- psr/cache: ^3.0
Requires (Dev)
- ergebnis/composer-normalize: dev-main
- laravel/laravel: ^8.4.4 || ^9.0 || ^10.0
- laravel/pint: ^1.2
- nunomaduro/larastan: ^1.0
- nyholm/psr7: ^1.4
- orchestra/testbench: 6.25.1
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.2
- phpstan/phpstan: ^1.7
- phpstan/phpstan-strict-rules: 1.4.3
- phpunit/phpunit: ^9.5
- psalm/plugin-laravel: ^2.0
- rector/rector: ^0.13.6
- vimeo/psalm: ^4.28
- wikimedia/composer-merge-plugin: ^2.0
This package is not auto-updated.
Last update: 2024-09-27 04:10:59 UTC
README
Auth0认证和管理API的Laravel SDK。
文档
入门
要求
- PHP 8.0+
- Laravel 8 / Laravel 9
- 在
app/Http/Kernel.php
中启用Illuminate\Session\Middleware\StartSession
请查阅我们的支持策略,了解未来语言和框架版本将何时停止支持。
Octane支持目前是实验性的,不建议在生产环境中使用。
安装
使用Composer将依赖项添加到您的应用程序中
composer require auth0/login
配置Auth0
在Auth0仪表板中创建一个Regular Web Application
。确认“Token Endpoint Authentication Method”设置为POST
。
接下来,在“设置”页面下的“应用程序URI”部分配置您的应用程序的回调和注销URL
- 允许的回调URL:Auth0在身份验证期间将重定向到的应用程序的URL,例如,
https://:3000/callback
。 - 允许的注销URL:Auth0在用户注销后重定向到的应用程序的URL,例如,
https://:3000/login
。
请注意域名
、Client ID
和Client Secret
。这些值将在稍后的配置中使用。
发布SDK配置
使用Laravel的CLI在项目中生成Auth0配置文件
php artisan vendor:publish --tag auth0-config
项目中将出现一个新文件,app/config/auth0.php
。您应避免直接修改此文件。
配置您的.env
文件
打开您应用程序目录中的.env
文件,并添加以下适合您应用程序类型的行
对于有状态Web应用程序
AUTH0_DOMAIN="Your Auth0 domain"
AUTH0_CLIENT_ID="Your Auth0 application client ID"
AUTH0_CLIENT_SECRET="Your Auth0 application client secret"
AUTH0_COOKIE_SECRET="A randomly generated string"
使用openssl rand -hex 32
为您的AUTH0_COOKIE_SECRET
提供一个足够长且随机的字符串。
对于无状态后端应用程序
AUTH0_STRATEGY="api"
AUTH0_DOMAIN="Your Auth0 domain"
AUTH0_CLIENT_ID="Your Auth0 application client ID"
AUTH0_CLIENT_SECRET="Your Auth0 application client secret"
AUTH0_AUDIENCE="Your Auth0 API identifier"
设置您的Laravel应用程序
集成SDK的Guard需要对您的config\auth.php
文件进行修改。
首先,找到defaults
部分。将默认guard
设置为auth0
,如下所示
// 📂 config/auth.php 'defaults' => [ 'guard' => 'auth0', // 📝 Leave any other settings in this section alone. ],
接下来,找到guards
部分,并在其中添加auth0
// 👆 Continued from above, in config/auth.php 'guards' => [ // 📝 Any additional guards you use should stay here, too. 'auth0' => [ 'driver' => 'auth0', 'provider' => 'auth0', ], ],
接下来,找到providers
部分,并同样在其中添加auth0
// 👆 Continued from above, in config/auth.php 'providers' => [ // 📝 Any additional providers you use should stay here, too. 'auth0' => [ 'driver' => 'auth0', 'repository' => \Auth0\Laravel\Auth\User\Repository::class ], ],
尽管默认已启用,但现在确保在您的app/Http/Kernel.php
文件中启用了StartSession
中间件是个好时机
protected $middlewareGroups = [ 'web' => [ // ... \Illuminate\Session\Middleware\StartSession::class, // ... ], ];
将登录添加到有状态Web应用程序
对于提供登录和登出的常规Web应用程序,我们提供了预构建的路由控制器,可以添加到您的app/routes/web.php
文件中,这些控制器将自动处理您的应用程序的认证流程,使用Auth0为您完成
Route::get('/login', \Auth0\Laravel\Http\Controller\Stateful\Login::class)->name('login'); Route::get('/logout', \Auth0\Laravel\Http\Controller\Stateful\Logout::class)->name('logout'); Route::get('/auth0/callback', \Auth0\Laravel\Http\Controller\Stateful\Callback::class)->name('auth0.callback');
使用中间件保护路由
此SDK包括中间件,用于简化您的Laravel路由的认证(常规Web应用程序)或授权(后端API应用程序),具体取决于您的应用程序类型
有状态Web应用程序
这些用于处理登录和登出的传统应用程序
auth0.authenticate
中间件将检查是否存在用户会话,并将没有会话的任何请求重定向到登录路由
Route::get('/required', function () { return view('example.user.template'); })->middleware(['auth0.authenticate']);
auth0.authenticate.optional
中间件将检查是否存在用户会话,但不会拒绝或重定向没有会话的请求,允许您将这些请求视为“访客”请求
Route::get('/', function () { if (Auth::check()) { return view('example.user.template'); } return view('example.guest.template'); })->middleware(['auth0.authenticate.optional']);
请注意,
example.user.template
和example.guest.templates
视图只是示例,并不属于SDK的一部分;请根据您的应用程序适当替换这些内容。
无状态后端应用程序
这些应用程序通过请求的'Authorization'头接受访问令牌
auth0.authorize
中间件将解析访问令牌并拒绝任何包含无效令牌的请求
Route::get('/api/private', function () { return response()->json([ 'message' => 'Hello from a private endpoint! You need to be authenticated to see this.', 'authorized' => Auth::check(), 'user' => Auth::check() ? json_decode(json_encode((array) Auth::user(), JSON_THROW_ON_ERROR), true) : null, ], 200, [], JSON_PRETTY_PRINT); })->middleware(['auth0.authorize']);
auth0.authorize
中间件还允许您根据范围可选地过滤请求的访问令牌
Route::get('/api/private-scoped', function () { return response()->json([ 'message' => 'Hello from a private endpoint! You need to be authenticated and have a scope of read:messages to see this.', 'authorized' => Auth::check(), 'user' => Auth::check() ? json_decode(json_encode((array) Auth::user(), JSON_THROW_ON_ERROR), true) : null, ], 200, [], JSON_PRETTY_PRINT); })->middleware(['auth0.authorize:read:messages']);
auth0.authorize.optional
中间件将解析可用的访问令牌,但不会阻止没有令牌的请求。这在您想将无令牌请求视为“访客”请求时很有用
Route::get('/api/public', function () { return response()->json([ 'message' => 'Hello from a public endpoint! You don\'t need to be authenticated to see this.', 'authorized' => Auth::check(), 'user' => Auth::check() ? json_decode(json_encode((array) Auth::user(), JSON_THROW_ON_ERROR), true) : null, ], 200, [], JSON_PRETTY_PRINT); })->middleware(['auth0.authorize.optional']);
支持策略
我们的支持窗口由Laravel发布支持和PHP发布支持计划决定,并且当下面的Laravel框架或PHP运行时停止接收安全修复时,支持结束,以先到者为准。
已到期的语言或框架版本的弃用不被视为破坏性更改,因为Composer优雅地处理这些场景。遗留应用程序将停止从我们这里接收更新,但将继续在这些不受支持的SDK版本上运行。请确保您的PHP环境和Laravel框架依赖始终是最新的。
Octane支持
Octane兼容性目前被视为实验性和不受支持的。
尽管我们正在努力确保SDK完全与该功能兼容,但我们不建议在生产环境中使用此功能,直到我们有充分的信心并宣布支持。由于Octane对Laravel核心行为的激进更改,存在尚未完全识别或解决的问题。
在努力实现完整的Octane支持时,我们非常欢迎反馈和错误修复贡献。
反馈
贡献
我们感谢对该存储库的反馈和贡献!在您开始之前,请查看以下内容
提出问题
要提供反馈或报告错误,请在我们的问题跟踪器上提出问题。
漏洞报告
请不要在公共Github问题跟踪器上报告安全漏洞。有关披露安全问题的负责任披露计划详细说明了程序。
Auth0是一个易于实现、可定制的认证和授权平台。要了解更多信息,请访问为什么选择Auth0?
本项目采用MIT许可协议。有关更多信息,请参阅许可文件。