【问题标题】:Locally Testing Azure Mobile Auth - invalid jwt signature本地测试 Azure 移动身份验证 - 无效的 jwt 签名
【发布时间】:2016-10-18 06:22:52
【问题描述】:

正如here 所讨论的,我正在使用 Azure 移动应用后端 (nodeJS)。我一直在使用默认的 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

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

但是,POST 请求的响应是:

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

我认为这可能是因为 Auth 令牌是由不同的服务(默认后端而不是我在 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' },
};

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

【问题讨论】:

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


    【解决方案1】:

    要在本地验证由托管服务创建的 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 文件中来将此文件排除在部署之外。

    【讨论】:

    • 谢谢!我已经这样做了,找到了我的 WEBSITE_AUTH_SIGNING_KEY 并将其添加到我的 azureMobile.js 文件中,该文件与我的 app.js 文件位于同一目录中。但是,我仍然得到相同的结果。有没有办法判断我的 azureMobile 文件是否被正确引用,或者是否有其他问题?如果有任何其他想法,我将不胜感激!
    • 我意识到我在一两个版本前就破坏了这个过程。在 github 上添加了一个问题,该问题解释并提供了解决方法 - github.com/Azure/azure-mobile-apps-node/issues/444。
    • 恐怕即使启用了该属性,我也会遇到问题。我的azureMobile.js 文件没有被识别(有没有办法检查这个)或者其他错误,我需要设置任何身份验证提供者的签名秘密吗?例如我使用的令牌是 facebook 令牌,我需要指定 APPSETTING_WEBSITE_AUTH_FB_APP_ID 或 APPSETTING_WEBSITE_AUTH_FB_APP_SECRET 吗?
    • github 上有一个活跃的问题,用于显示从 azureMobile.js 引发的异常。目前,异常被吞没了——我们很快就会解决这个问题。话虽如此,您的文件看起来不错,应该可以正常执行。您可以将配置移动到 azure-mobile-apps 顶级函数,即 var mobileApp = require('azure-mobile-apps')({ config }) 仅用于测试。另外,尝试设置 auth: { validateTokens: false }
    • 我并不是想把“config”放在那里...我的意思是把你的配置对象放在那里。尝试使用 node-inspector 在 azureMobile.js 文件中放置一个断点,然后使用 node-debug 命令进入它。
    猜你喜欢
    • 2018-06-23
    • 2023-03-25
    • 2022-01-18
    • 2019-10-30
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多