我正在使用 auth0 进行用户身份验证,并且我有一个用于 CRUD 帖子(标题、图像、描述)的 API.如何对 CRU

I am using auth0 for user authentication, and I have a API for CRUD posts (title, img, desc). How to make authenticated calls to the CRUD api?

本文关键字:标题 图像 帖子 描述 CRU API CRUD 用于 auth0 身份验证 用户      更新时间:2023-09-26

我正在构建一个反应应用程序,为了登录/验证用户,我正在使用auth0。

在使用 auth0 之前,我一直在对我的 API 进行 CRUD 调用来发布帖子。 这又是,在使用 auth0 之前和我有用户之前,所以我只是随意地发帖。

现在我正在使用 auth0,我已经设置了它,以便它将我创建的用户插入到我的 mongodb 中的Users集合中。 因此,每个用户现在都有一个id,我将使用它来关联帖子。

登录后,auth0 发送一个令牌(我存储在本地存储中),如下所示: eyJ0eXAiOiJKV1QiLCJhbGviOdJIUzI1NiJ9.eyJpc3MiOiJodHRwczovLzI4MTMzMC5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NTc4M2VjMjlkYmIxMAEwMTAwNTE1M2VmIiwiYXVkIeoiTzE3MGJkNnlnc3lCODkyY295Y25haVhyVkpQZHBUUlgiLCJleHAiOjE0Njw0NjkyMDQsImlhdCI6MTQ4ODDzMzIwNH0.gte9fxVURQGzOWD1ZF8AB-JachZuIkYmux6WKOZ-fdk

这是我的问题 - 如何对我的 CRUD API 进行经过身份验证的调用? 也就是说,只有登录用户才能进行 API 调用。 我还没有找到有关此主题的教程。

您要做的是将身份验证令牌设置为来自客户端的每个请求中的标头。 既然你说 auth0 正在为登录用户发送令牌,你可以简单地将此令牌(可能为了安全等而散列,但这个问题与安全性无关)存储在你的数据库中,在你的用户对象中。

在标头中设置令牌后,可以在 express 的 request 对象中获取它,然后在数据库中搜索它。 如果它有效,则表示您已成功对请求进行身份验证(并知道哪个用户发出了该请求)。 如果请求的标头中没有有效的身份验证令牌,则可以发回403错误。

执行此操作的最简单方法可能是在中间件中,您可以在中间件中简单地对所有请求设置一个值,以跟踪它们是否经过身份验证。

例如,在快递中:

function checkAuth(req, res, next) {
  //grab your auth token
  var authToken = req.get('X-Authentication-Token'); //or whatever you've set the name of your auth header to be in the client
  
  //decrypt it it you have to, etc.
  
  //pseudo code.  You'd have, for example, a function that would 
  //search for the auth token in your database, and return the user 
  //object if it exists, and throw an error if it didn't.
  validateTokenFromDB(authToken).then(function(user) {
    //you can set some values on your request here, so that they're 
    //available later to your handlers.
    req.user = user;
    req.authToken = authToken;
    next();
   }).catch(function(err) {
     //return your 403.
     return invalidRequest(req, res);
   });
}
function invalidRequest(req, res) {
  res.status(403);
  res.end('{"error":"unauthorized"}');
}

现在,您可以将此中间件应用于要保护的任何路由。

同样,在我的示例中,我当然不处理令牌哈希,也不发送和发送带有纯文本、TLS 等的令牌。只是说明使用身份验证令牌的一般体系结构。

希望这有帮助!

我建议以持有者格式发送您的授权标头中的令牌:。您可以使用客户端密码验证令牌的签名,而不是存储令牌 - 这可以使用适用于 JSON Web 令牌的任何 SDK 来完成。可以在 React 的 Auth0 快速入门和所选技术的 Auth0 服务器教程中了解详细信息。

希望这有帮助!