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

时间:2016-02-20 17:26:55

标签: express asp.net-web-api oauth asp.net-web-api2 asp.net-identity-2

我正在使用asp.net& amp;身份2.这是我的主要数据api。

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

Angular spa将消耗这些api用于数据和搜索需求。

如何使用asp.net身份已经在用户登录时为角度提供的承载令牌来保护expressjs api调用?

2 个答案:

答案 0 :(得分:3)

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

  1. 使用带有WEB API和ASP.Net Identity的JWT构建授权服务器,如此处所述http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/
  2. 在我想要使用相同令牌保护的所有其他API(资源服务器)中编写消费逻辑(即中间件)。由于您在expressjs中有另一个API,因此您需要执行以下操作
  3. npm install jsonwebtoken

    参考 - https://jwt.io

        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.' 
          });
    
        }
      });
    

    参考 - https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

    P.S。 - 我使用发布JWT(授权服务器或Auth&资源服务器)的Web API完成了这项工作,并成功地保护了在python(资源服务器)和spring(资源服务器)中构建的API。

答案 1 :(得分:0)

尝试 express-bearer-token 。这似乎符合您的描述

https://www.npmjs.com/package/express-bearer-token