【问题标题】:Microsoft Azure Active Directory Passport AuthenticationMicrosoft Azure Active Directory 护照身份验证
【发布时间】:2018-03-20 15:05:14
【问题描述】:

波纹管代码运行良好,但是当授权标头带有来自 php 代码的空令牌(例如-'Authorization: Bearer')时,node.js 应用程序崩溃。我正在使用“passport-azure-ad”节点模块。我检查了 Post man,它验证了令牌,但是当请求来自 php curl 请求时,应用程序崩溃了。原因是,http 标头在“passport-azure-ad”节点模块中设置了两次。我无法捕捉到这个错误。

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

崩溃错误跟踪 - _http_outgoing.js:356 throw new Error('Can\'t set headers after they are sent.'); ^

错误:发送后无法设置标头。 在 \node_modules\passport\lib\middleware\authenticate.js:156:13)

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 );

我该如何处理这个错误,谢谢。

【问题讨论】:

  • 当您从 PHP 发送验证令牌而不是空令牌时,它是否有效?您正在开发的passport-azure-ad 是什么版本?确切的 curl 请求代码是什么?
  • @FeiXue,感谢您的回复,是的,当我通过 php curl 传递有效或无效令牌时,它工作得很好。我正在使用 3.0.8 版本的“passport-azure-ad”。我用 php 代码编辑了问题。

标签: php node.js azure azure-active-directory passport-azure-ad


【解决方案1】:

Node.js 在a single thread 运行,如果不处理错误会崩溃。这是关于 Node.js 中的异常处理的一个非常有用的线程:

Node.js Best Practice Exception Handling

【讨论】:

  • 是的,我们可以全局捕获错误,但我正在寻找在确切位置捕获错误。
  • 我正在尝试使用WebAPI-Bearer-NodeJS 重现该问题,但失败了。无论是否提供令牌,代码示例都不会崩溃。并且根据错误消息,似乎应用程序在发送响应后设置了标头。并参考this thread 获取相同的错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 2016-12-15
  • 2016-01-12
相关资源
最近更新 更多