本地测试Azure Mobile Auth - 无效的jwt签名

时间:2016-06-16 16:04:17

标签: node.js azure authentication azure-mobile-services jwt

我正在使用Azure移动应用后端(nodeJS),正如here所述。我一直在使用默认的Web设置配置来开发我的移动应用程序,但现在我想自定义云后端功能,因此我使用Azure-Mobile-Apps SDK创建了一个本地后端。

我使用移动应用程序登录(使用Azure客户端SDK的授权方面),然后捕获了AuthToken。

然后,我构建了一个Postman HTTP POST请求,其中包含以下标题:

ZUMO-API-VERSION = 2.0.0
x-zumo-auth = eyJ0eX000000000000000000000000000000.eyJ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000000000-000000000_00000_00000

注意:我的令牌实际上没有所有这些零,它看起来像一个有效的令牌。

但是,POST请求的响应是:

  

{     “name”:“JsonWebTokenError”,     “消息”:“无效签名”   }

我认为这可能是因为Auth令牌是由不同的Service(默认后端而不是我在localhost上运行的项目)生成的。所以我用localhost初始化了一个客户端并尝试使用它进行身份验证,但我得到了:

  

JS:登录错误!错误:未启用使用所选身份验证提供程序登录   chromium:[INFO:CONSOLE(12)]“不允许加载本地资源:file:///android_asset/webkit/android-weberror.png”,来源:data:text / html,chromewebdata(12)

更新

我从https://myApp.scm.azurewebsites.net/Env.cshtml找到了我的WEBSITE_AUTH_SIGNING_KEY,并将其添加到我的azureMobile.js file,该app.js与我的console.log("Test"); module.exports = { cors: { origins: ['localhost'] }, data: { provider: 'mssql', server: '127.0.0.1', database: 'mytestdatabase', user: 'localDemo', password: 'myPassword' }, logging: { level: 'verbose' }, auth: { secret: 'xzy0000000000000000000000000000000000' }, }; 文件位于同一目录中。它看起来像这样:

//div[text()='hello']

但是,我仍然得到相同的结果。有没有办法告诉我的azureMobile文件是否被正确引用,或者是否有其他错误?

1 个答案:

答案 0 :(得分:4)

要在本地验证由托管服务创建的JWT令牌,您需要获取使用的签名密钥。您可以通过打开浏览器https://mobile-service-name.scm.azurewebsites.net/Env.cshtml并找到WEBSITE_AUTH_SIGNING_KEY的值来获取此信息。获取此值并通过在项目根目录中创建(或更新)名为azureMobile.js的文件来配置本地服务器,其中包含以下内容:

module.exports = {
    auth: { secret: 'value from WEBSITE_AUTH_SIGNING_KEY' }
};

建议您将azureMobile.js添加到.gitignore文件中,从部署中排除此文件。