2016-11-15 39 views
5

Chciałbym wiedzieć, czy możliwe jest użycie pakietu NPM express-jwt jako oprogramowania pośredniczącego do weryfikacji tokenów JWT wydanych przez Azure AD.Użyj express-jwt jako oprogramowania pośredniego do sprawdzania tokenów Azure AD wydanych

Mamy API WWW napisane w Express/node i chcielibyśmy zastosować wzór oprogramowania pośredniego do ochrony naszych punktów końcowych i zapełnienia zasady użytkownika.

Wygląda:

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

nie działa, gdyż wymaga tajemnicy klienta, ale z AD (podobnie jak w przepływie niejawny) żetony są pobierane za pośrednictwem interakcji z użytkownikiem i nie ma tajny klient.

+0

Możesz stworzyć własne oprogramowanie pośrednie i sprawdzić, jak chcesz, w jaki sposób odzyskujesz JWT? nagłówki autoryzacji? – Hosar

+0

Tak, to nagłówek autoryzacji (Token na okaziciela) Jak zweryfikowałbyś podpis? – Lutando

Odpowiedz

5

Możesz użyć "azure-ad-jwt". Jest dość prosty i nie wymaga wtrysku w oprogramowanie pośrednie. Możesz to zrobić jako pośredni krok w swojej własnej funkcji "middleware".

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