Auth0多租户体系结构-多个数据库连接



我们目前使用Auth0进行身份验证,并使用user.app_metadata对象为每个用户存储有关租户的信息。我们还要求每个租户列出用户。

遗憾的是,Auth0的策略是在查询用户时不能搜索app_metadata字段。

但是,您可以使用身份提供程序筛选用户,因此我为每个租户创建了一个自定义的数据库连接。

问题是,我如何使用多个客户数据库连接并使用托管页面登录用户?如果我使用options.allowedConnections对象提供一个可用连接的数组,它只默认为第一个连接,这意味着不在该连接上的用户无法登录。

我在这里做错了什么?

var lock = new Auth0Lock(config.clientID, config.auth0Domain, {
auth: {
redirectUrl: config.callbackURL,
responseType: (config.internalOptions || {}).response_type ||
config.callbackOnLocationHash ? 'token' : 'code',
params: config.internalOptions
},
assetsUrl:  config.assetsUrl,
allowedConnections: ['company-a', 'company-b', 'company-c], //this doesn't seem to work
rememberLastLogin: !prompt,
language: language,
languageDictionary: languageDictionary,
theme: {
logo:            'http://www.mydomain.co/img/logo.png',
primaryColor:    'purple'
},
prefill: loginHint ? { email: loginHint, username: loginHint } : null,
closable: false,
// uncomment if you want small buttons for social providers
// socialButtonStyle: 'small'
});
lock.show();

当您的问题发布时,无法搜索app_metadata。然而,现在,app_metadata可以通过使用Search_engine v3的Management API用户搜索端点进行搜索。

基于此,实现此功能的最简单方法是坚持使用单个连接,同时将租户信息存储在app_metadata中。然后,您可以根据元数据属性(例如app_metadata.tenant_name:"Tenant1")执行用户搜索。

如果您更喜欢使用多个数据库连接,Lock现在支持connectionResolver选项,该选项可用于根据一些自定义逻辑(例如输入的电子邮件地址)来决定使用哪个连接对用户进行身份验证。以下文件对此进行了更详细的概述:https://auth0.com/docs/libraries/lock/v11/selecting-the-connection-for-multiple-logins#selecting-在多个数据库连接之间

最新更新