2016-11-15 70 views
5

我想知道是否有可能使用express-jwt NPM包作为中间件来验证由Azure AD发出的JWT令牌。使用express-jwt作为中间件来验证Azure AD发出的令牌

我们有一个以express/node编写的web API,并希望应用中间件模式来保护我们的端点并填充用户原则。

好像:

server.use(jwt({ 
    audience: '{UUID}', 
    issuer: 'https://sts.windows.net/{UUID}', 
}).unless({path : ['/']})) 

不起作用,因为它需要一个客户端秘密,但是从AD(在多流隐等)的标记经由用户交互检索并没有客户端秘密。

+0

您可以创建自己的中间件并根据需要进行验证,如何检索JWT?授权标题? – Hosar

+0

是的,这是一个授权标题(不记名令牌) 你将如何验证签名? – Lutando

回答

5

您可以使用“azure-ad-jwt”。它相当简单,不需要注入中间件。当然,您可以将其作为您自己的“中间件”功能的中间步骤注入。

private verifyToken(req: any, res: any) { 
     var audience = "xxxxxxxxx"; 
     var tenantId = "xxxxxxxxx"; 

     var authorization = req.headers['authorization']; 
     return Rx.Observable.create((observer) => { 
      if (authorization) { 
       var bearer = authorization.split(" "); 
       var jwtToken = bearer[1]; 
       if (jwtToken) { 
        aad.verify(jwtToken, { audience: audience, tenantId: tenantId }, function (err, result) { 
         if (result) { 
          observer.next(true); 
         } else { 
          res.status(401).send('That is not a valid token!'); 
         } 
        }) 
       } else { 
        res.status(401).send('No token in header.'); 
       } 
      } else { 
       res.status(401).send('Missing authorization attribute in header.'); 
      } 
     }); 
    } 
相关问题