Strapi 上的单点登录允许您为管理面板配置其他登录和注册方法。 企业版
目前无法将唯一的 SSO 提供商与用于 Strapi 帐户的电子邮件地址关联,这意味着无法将对 Strapi 帐户的访问限制为仅一个 SSO 提供商。有关解决此问题的更多信息和解决方法,请参阅专用的 GitHub 问题。
SSO 配置位于应用程序的服务器配置中,位于 ./config/admin.js
。
访问配置
提供商的配置应写入管理面板配置的 auth.providers
路径中。
auth.providers
是 提供商配置 的数组。
module.exports = ({ env }) => ({
// ...
auth: {
providers: [], // 提供商的配置位于此处
},
})
设置提供程序配置
提供程序的配置是一个 JavaScript 对象,具有以下属性:
名称 | 必需 | 类型 | 说明 |
---|---|---|---|
uid | true | 字符串 | 策略的 UID。它必须与策略的名称匹配 |
displayName | true | 字符串 | 将在登录页面上用于引用提供程序的名称 |
icon | false | 字符串 | 图像 URL。如果指定,它将替换登录页面上的 displayName |
createStrategy | true | 函数 | 为您的提供程序构建并返回新护照策略的工厂。以 strapi 实例作为参数 |
uid
属性是每个策略的唯一标识符,通常位于策略的包中。如果您不确定它指的是什么,请联系策略的维护者。
示例:提供商徽标的安全例外情况
module.exports = [
// ...
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ['\'self\'', 'https:'],
'img-src': [
'\'self\'',
'data:',
'blob:',
'dl.airtable.com',
'www.okta.com', // 提供商徽标的基本 URL
],
'media-src': [
'\'self\'',
'data:',
'blob:',
'dl.airtable.com',
'www.okta.com', // 提供商徽标的基本 URL
],
'upgradeInsecureRequests': null,
},
},
},
},
// ...
]
When deploying the admin panel to a different location or on a different subdomain, an additional configuration is required to set the common domain for the cookies. This is required to ensure the cookies are shared across the domains.
Deploying the admin and backend on entirely different unrelated domains is not possible at this time when using SSO.
Example: Setting custom cookie domain
module.exports = ({ env }) => ({
auth: {
domain: env('ADMIN_SSO_DOMAIN', '.test.example.com'),
providers: [
// ...
],
},
url: env('ADMIN_URL', 'http://admin.test.example.com'),
// ...
})
createStrategy
工厂
护照策略通常通过使用 2 个参数实例化来构建:配置对象和验证函数。
配置对象
配置对象取决于策略需求,但通常会要求在提供商端建立连接后重定向到回调 URL。
可以使用 getStrategyCallbackURL
方法为您的提供商生成特定的回调 URL。还需要在提供商端写入此 URL 以允许从其重定向。
回调 URL 的格式如下:/admin/connect/<provider_uid>
。
strapi.admin.services.passport.getStrategyCallbackURL
是一个 Strapi 助手,您可以使用它来获取特定提供商的回调 URL。它将提供商名称作为参数并返回 URL。
如果需要,这也是您放置 OAuth2 应用程序的客户端 ID 和密钥的地方。
验证函数
验证函数在此用作中间件,允许用户转换并从提供程序 API 返回的数据并进行额外处理。
此函数始终将 done
方法作为最后一个参数,用于将所需数据传输到 SSO 的 Strapi 层。
其签名如下:void done(error: any, data: object);
,并遵循以下规则:
- 如果
error
未设置为null
,则发送的数据将被忽略,并且控制器将抛出错误。 - 如果 SSO 的自动注册功能被禁用,则
data
对象只需要由email
属性组成。 - 如果启用了 SSO 的自动注册功能,则您需要在
data
对象中定义(除了email
)username
属性或firstname
和lastname
。
添加提供商
添加新提供商意味着为您的管理员添加一种新的登录方式。
Strapi 使用 Passport.js,它支持大量提供商。因此,任何不需要额外自定义数据的有效护照策略都应该适用于 Strapi。
诸如 ldapauth 之类的策略不是开箱即用的,因为它们需要从管理面板发送额外的数据。 如果您想将 LDAP 提供商添加到您的应用程序,您需要编写一个 自定义策略。 您还可以使用 Okta 和 Auth0 等服务作为桥接服务。
配置提供程序
要配置提供程序,请按照以下步骤操作:
- 确保在管理配置文件中导入策略,无论是从已安装的包还是本地文件。
- 您需要在管理面板配置中的
auth.providers
数组中添加一个新项目,该项目将与 上面给出的格式 匹配 - 重新启动应用程序,提供程序应出现在管理员登录页面上。
提供程序配置示例
Using: passport-google-oauth2
yarn add passport-google-oauth2