使用ASP.net Identity 2验证expressjs api调用

使用ASP.net Identity 2验证expressjs api调用,express,asp.net-web-api,oauth,asp.net-web-api2,asp.net-identity-2,Express,Asp.net Web Api,Oauth,Asp.net Web Api2,Asp.net Identity 2,我正在使用asp.net和identity 2构建rest api。这是我的主要数据api 我还在使用expressjs构建另一个api,用于搜索存储在搜索索引中的数据 Angular spa将使用这些API来满足数据和搜索需求 如何使用asp.net identity在用户登录时已经提供给angular的承载令牌保护expressjs api调用?请尝试ExpressBearter令牌。这似乎符合你的描述 要实现这一点,您需要在ExpressJSAPI中使用令牌消费中间件。我这样做如下 使用J

我正在使用asp.net和identity 2构建rest api。这是我的主要数据api

我还在使用expressjs构建另一个api,用于搜索存储在搜索索引中的数据

Angular spa将使用这些API来满足数据和搜索需求


如何使用asp.net identity在用户登录时已经提供给angular的承载令牌保护expressjs api调用?

请尝试ExpressBearter令牌。这似乎符合你的描述


要实现这一点,您需要在ExpressJSAPI中使用令牌消费中间件。我这样做如下

  • 使用JWT和WEB API以及ASP.Net标识构建了一个授权服务器,如下所述
  • 在我希望使用相同令牌保护的所有其他API(资源服务器)中编写消费逻辑(即中间件)。因为在expressjs中有另一个API,所以需要执行以下操作
  • npm安装jsonwebtoken

    参考-

    参考-


    另外,我已经通过发布JWT(授权服务器或Auth&resource服务器)的web API实现了这一点,并且成功地保护了python(资源服务器)和spring(资源服务器)中内置的API。

    您能检查我的回答吗?我现在坚持在.net中完成所有工作,但我非常感谢您的时间。当我转换成微服务时,我一定会遵循这一点。
        var apiRoutes = express.Router(); 
        apiRoutes.use(function(req, res, next) 
        {      
        // check header or url parameters or post parameters for token
        var token = req.body.token || req.query.token || req.headers['x-access-token'];
    
        // decode token
        if (token) {
    
          // verifies secret and checks exp
          jwt.verify(token, app.get('superSecret'), function(err, decoded) 
        {      
            if (err) 
          {
              return res.json({ success: false, message: 'Failed to authenticate token.' });    
            } 
          else 
          {
              // if everything is good, save to request for use in other routes
              req.decoded = decoded;    
              next();
            }
          });    
        } 
        else 
        {
    
          // if there is no token
          // return an error
          return res.status(403).send({ 
              success: false, 
              message: 'No token provided.' 
          });
    
        }
      });