pochocho / okta-saml-sso
Okta SAML SSO 对 Laravel 的支持
Requires
- php: ^8.1.0
- illuminate/auth: 9.*|10.*|11.*
- illuminate/support: 9.*|10.*|11.*
- litesaml/lightsaml: ^4.0
Requires (Dev)
- laravel/pint: ^1.17
- orchestra/testbench: ^v8.24.0
- phpstan/extension-installer: ^1.2
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-05 17:55:40 UTC
README
本包提供了一种简单易用的 Okta SAML 登录实现方案。该包有助于接收 SAML 响应和获取
安装
composer require pochocho/okta-saml-sso
生成您的证书,如果您想生成自签名证书,可以按照以下示例命令执行
注意:默认情况下,此包期望证书和密钥位于项目目录的根目录下。请记住将这两个文件添加到 .gitignore
openssl req -x509 -newkey rsa:2048 -nodes -keyout oktasso.key -out oktasso.crt -days 365
创建和配置 Okta 应用程序
创建您的 Okta 应用程序,选择 SAML 2.0 作为登录方法。
在表单中,单一登录 URL 指的是 Okta 在认证成功后发送 POST 请求的应用程序中的 URL。
受众 URI 是您发布有关其 SAML 配置(元数据)的公共信息的 URL
默认 RelayState 是 Okta 在成功登录后重定向到的 URL。
在此表单中,您还可以设置 属性声明 并将其映射到配置文件字段。此包假定属性使用 snake_case 命名约定(例如 first_name、last_name、email 等)
配置应用程序后,访问“登录”选项卡,然后单击“查看 SAML 设置说明”,页面加载后下载证书文件,并将其放置在应用程序根目录中,命名为 idp.cert 重要:不要将此文件提交到版本控制
配置
以下值必须在您的 .env 中设置
OKTA_SIGNON_URL:您可以从 Okta 管理仪表板获取此值,转到 SAML 应用程序的“登录”选项卡,然后单击“查看 SAML 设置说明”按钮。使用“身份提供者单点登录 URL”值。
LOGIN_REDIRECT_ROUTE:这是您希望用户登录后重定向到的路由名称。
您还可以通过运行以下命令发布配置文件
php artisan vendor:publish --tag=okta-saml-sso
该包假定证书和密钥文件位于项目根目录下,命名为 oktasso.crt 和 oktasso.key
OKTA_CERTIFICATE_PATH证书文件的路径OKTA_KEY_PATH密钥文件的路径OKTA_ATTRIBUTE_STATEMENTS以逗号分隔的属性声明列表,设置在 Okta 中(默认值:'first_name','last_name','email','groups')
如果您的应用程序不使用 User 模型进行身份验证,您可以在 env 中使用 OKTA_AUTHENTICATABLE_MODEL 键配置模型。
使用
提供
使用此包的最简单方法是使用提供的控制器。该包提供了两个控制器,一个用于使用加密,另一个用于不使用加密。要开始,请在 web.php 路由文件中注册路由
Route::post('/login', \Pochocho\OktaSamlSso\Http\Controllers\EncryptedLoginController::class)->name('login');
注意:由于 Okta 在认证完成后向应用程序发送 post 请求,因此我们需要忽略登录路由的 csrf 验证。您可以通过向应用程序的
VerifyCsrfToken中间件中添加登录 URL 来完成此操作。
注册 SsoAuthenticate 中间件到 Http Kernel。您可以替换 auth 中间件或创建自己的中间件。
'auth' => \Pochocho\OktaSamlSso\Http\Middleware\SsoAuthenticate::class,
将新的中间件添加到您的受保护路由中,尝试加载受保护路由,您应该会被重定向到 Okta 登录流程。
自定义
您可以实现自己的控制器,并使用OktaSaml类来处理来自Okta SAML响应的断言。该类提供了两种方法,一种用于处理未加密的SAML响应$oktaSaml->getEntity(),另一种用于处理加密的响应$oktaSaml->getEncryptedEntity()。
OktaSaml类绑定到IoC容器,可以通过依赖注入或使用app()->make(Pochocho\OktaSamlSso\OktaSaml::class);来解析。