【问题标题】:How to store user information with Net Core API with external users from Auth0如何使用来自 Auth0 的外部用户使用 Net Core API 存储用户信息
【发布时间】:2020-04-06 05:03:16
【问题描述】:

我正在构建一个 API,它将使用 Auth0 进行身份验证,并将拥有 Web 和移动客户端。

两个客户端都将使用来自 Auth0 的基于 Web 的登录来获取他们的令牌。

我正在寻找在我的 API 数据库中获取和存储一些用户信息的最佳方式,因此我可以例如列出某个组中的用户,将文章与作者联系起来,为无法存储在 Auth0 中的用户授予一些权限(原因有两个:没有 mtm 令牌,更重要的是,它是一种多租户应用程序,并且权限保持复杂它们在令牌中)。

token 中有 userId 可以使用,但是 e.g.何时触发用户保存/更新?在每个请求上运行它听起来效率不高。

有人做过这样的事吗?

如何以最好的方式处理它?

【问题讨论】:

  • 不确定我是否完全理解您想要实现的目标,但您可以订阅 Auth0 auth0.com/docs/hooks/concepts/… 上的注册后挂钩,然后在您的数据库中创建用户。我想你不会使用 Auth0 进行授权,只使用身份验证?
  • 确实如此。我的授权是复杂的使用 Auth0
  • 那么在您的数据库中存储具有特定于域的元数据的用户就足够了吗?对不起,我不明白问题是什么..
  • 您正在寻找“用户帐户配置”:登录时,您使用提供商提供的 UPN 在本地数据库中查找身份。您可以保留外部令牌或向客户端发布新的“本地”令牌。如果用户帐户不存在:创建一个,如果存在,更新它。调用AddOpenIdConnect 时,传递带有Event.OnTokenValidated 回调的选项,您可以在其中进行配置并选择性地转换AuthenticationTicket。
  • 当用户使用令牌调用 API 时是否调用它?因为 API 不以任何方式参与登录过程。

标签: c# .net-core asp.net-core-webapi auth0


【解决方案1】:

我已经想出了一个解决方案,但是如果有人在这里推荐更好的方法,请这样做!感谢 cmets,我进入了钩子,然后规则方向,所以我很感激任何参与。

我认为这是一个相当简单的案例,在本地开发过程中有点棘手,但可以通过 API 中的一些开发中间件来解决。

我将使用带有疯狂简单规则的 Auth0 规则:

function (user, context, callback) {
  const axios = require('axios');
    axios.post('https://my-web-api.com/auth0/notify', { user }, {
  headers: {
  'x-api-key': configuration.API_KEY
  }})
  .then(() => callback(null, user, context));
}

在规则中,我已将 API_KEY 添加为变量,因此它不在代码中,加密且安全。

通过使用它,我会将当前用户配置文件从 Auth0 发送到后端,在那里我将简单地检查用户是否存在并在必要时更新配置文件。

根据docs:

请注意,规则也在令牌刷新流程中运行。

它还会在刷新过程中为我提供更新,所以如果有任何变化,我也会得到更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2017-02-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多