Auth0多租户架构 - 多个数据库连接

时间:2017-11-22 16:33:26

标签: 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();

1 个答案:

答案 0 :(得分:3)

发布问题后,无法搜索app_metadata。现在,可以使用search_engine v3通过Management API User Search endpoint来搜索app_metadata。

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

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