不建议使用Auth0模拟。我应该改用什么?

Gre*_*ler 6 api impersonation access-token reactjs auth0

在我们的网站上,管理员应该能够以用户(客户端)的身份查看网站。我计划为此使用Auth0,只是注意到他们的模拟功能已被弃用。

我可以在Redux中强制某些登录标志,以允许管理员以用户身份查看,但是,要从API获取用户的任何数据,我要从登录期间Auth0生成的访问令牌中获取用户ID。因此,API将仅从当前登录的用户访问令牌中获取数据。

有人知道有什么方法可以模拟用户吗?我认为通过解析访问令牌中的用户ID来获取该用户的任何数据,从而对我的API施加了限制,如果我错了,请更正我。

我能想到的唯一方法是,如果管理员“以用户身份查看”,则可以在API调用中传递用户的ID。在控制器中,我可以检查用户ID字段是否存在并使用它代替当前登录的用户,但是我认为传递用户ID并不是一个好主意。也许我可以在每个请求上添加一个中间件,并且如果该用户ID在API调用中存在,我可以检查该用户的角色以确保它是可以验证请求的管理员。

你怎么看?关于此方法还有其他想法/批评吗?

谢谢!!

Min*_*hah 3

我认为您无需在 API 调用中传递用户 ID即可实现此目的,因为这样做并不安全。

如果您的管理员想以您的客户身份查看网站。如果您需要用户 ID来获取用户数据。然后您可以在auth0 提供的名为元数据的字段中添加用户 ID 。并使用规则在访问令牌中添加元数据字段。

因此基本上您只能像一般情况下那样从访问令牌中获取用户 ID 。

现在在您的控制器中检查访问令牌是否具有用户 ID,如果找到,请使用该 ID 来获取其他数据。

采用这种方法,您不需要传递任何额外的数据,所有内容都将仅使用访问令牌来处理。

为了更安全的方法,在控制器中以及上述检查的同时,您还可以检查角色以验证它是否具有管理员角色。

要在 auth0 中添加规则,以下是您需要使用的代码:

function (user, context, callback) {
// The currently requested scopes can be accessed as follows:
// context.request.query.scope.match(/\S+/g)
//add the following line in this function additionally.
context.accessToken['metadata'] = user.user_metadata;
callback(null, user, context);
}
Run Code Online (Sandbox Code Playgroud)