1

Le code ci-dessous fonctionne correctement, mais lorsque l'en-tête d'autorisation est fourni avec un jeton vide du code php (par exemple, 'Authorization: bearer'), l'application node.js se bloque. J'utilise le module de noeud "passport-azure-ad". J'ai vérifié avec Post Man, ça valide le jeton, mais quand la requête vient de la demande de php curl, l'application se bloque. La raison pour cela, l'en-tête http défini deux fois dans le module de noeud "passe-azure-ad". Je n'ai pas pu attraper cette erreur.Authentification passeport Microsoft Azure Active Directory

router.get('/getUser', passport.authenticate('oauth-bearer', { 
    session: false, 
    tenantIdOrName: TENANT 
}), function (req, token, done) { 
    // Send response 
}); 

trace d'erreur Crash - _http_outgoing.js: 356 throw new Error ('Can \' t mis en-têtes après leur envoi.); ^

Erreur: Impossible de définir les en-têtes après leur envoi. à \ node_modules \ passeport \ lib \ middleware \ authenticate.js: 156: 13)

code PHP =>

$headers = array ('Authorization: bearer ' . $Requestheader['id_token']); 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt ($ch, CURLOPT_URL, 'http://serverhost/auth/getUser'); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); 
return curl_exec ($ch); 

Comment puis-je gérer cette erreur de mon côté, Je vous remercie.

+1

Est-ce que ça marche quand vous envoyez le jeton validate au lieu de jeton vide de PHP? Et quelle est la version de 'passport-azure-ad' que vous développiez? Quel est le code exact de demande de curl? –

+0

@FeiXue, Merci pour votre réponse, Oui, ça fonctionne parfaitement lorsque je passe le jeton valide ou invalide à travers php curl. J'utilise la version 3.0.8 de "passport-azure-ad". J'ai édité la question avec le code de php. – Sudharshan

Répondre

0

Le Node.js est en cours d'exécution dans a single thread, il se bloque lorsque l'erreur n'est pas gérée. Voici un fil très utile au sujet de la gestion des exceptions dans Node.js:

Node.js Best Practice Exception Handling

+0

Oui, nous pouvons attraper l'erreur globalement, mais je cherche attraper l'erreur à l'endroit exact. – Sudharshan

+0

Je suis en train de reproduire le problème en utilisant [WebAPI-Bearer-NodeJS] (https://github.com/AzureADQuickStarts/WebAPI-Bearer-NodeJS/blob/master/node-server/app.js) mais j'ai échoué. L'exemple de code ne plantera pas, peu importe si le jeton est fourni. Et basé sur le message d'erreur, il semble que l'application a défini les en-têtes après l'envoi de la réponse. Et se référer [ce fil] (https://stackoverflow.com/questions/7042340/error-cant-set-headers-after-they-are-sent-to-the-client) pour le même message d'erreur. –