尝试通过Node JS设置API Management REST API身份验证 - javascript

我的目标是使用Azure API管理API对Node.js客户端进行身份验证。

我在将这个C#示例转换为Node.js Javascript时遇到了一些麻烦。我已经使用自己的ID和密钥测试了C#示例,并且似乎已使用API​​对200进行了身份验证,但是我的Node.js代码段中始终显示401

我觉得这可能与C#示例格式化格式为Format Specifier的到期(ex={1:o})的方式有关

C#示例

来源:Azure API Management REST API Authentication

using System;   
using System.Text;   
using System.Globalization;   
using System.Security.Cryptography;   

public class Program   
{   
    public static void Main()   
    {   
        var id = "12345678abcdefgh";   
        var key = "1234abcd5678asdf==";   
        var expiry = DateTime.UtcNow.AddDays(10);   
        using (var encoder = new HMACSHA512(Encoding.UTF8.GetBytes(key)))   
        {   
            var dataToSign = id + "\n" + expiry.ToString("O", CultureInfo.InvariantCulture);   
            var hash = encoder.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));   
            var signature = Convert.ToBase64String(hash);   
            var encodedToken = string.Format("SharedAccessSignature uid={0}&ex={1:o}&sn={2}", id, expiry, signature);   
            Console.WriteLine(encodedToken);   
        }   
    }   
}

我的Node.js代码段

var util = require('util')
var crypto = require('crypto')
var generateAccessCode = function() {
    var id = "1234asdf1234asdf";
    var key = "1234asdf1234ghjk";
    const accessCodeExpireDays = 10;
    const formatString = 'SharedAccessSignature uid=%s&ex=%s&sn=%s'
    const dataToSignString = '%s\n%s';

    //create expiry string
    var today = new Date();
    var expiry = new Date();
    expiry.setDate(today.getDate() + accessCodeExpireDays);
    expiry = expiry.toISOString();

    //create hash
    var dataToSign = util.format(dataToSignString, id, expiry)
    const hash = crypto.createHmac('sha512', key)
        .update(dataToSign)
        .digest('base64');

    var encodedToken = util.format(formatString, id, expiry, hash);

    console.log(encodedToken)
}

generateAccessCode()

javascript参考方案

您可能需要通过Moment.js如下设置到期日期的格式:

//create expiry string
var today = new Date();
var expiry = new Date();
expiry.setDate(today.getDate() + accessCodeExpireDays);
expiry = moment(expiry).format('YYYY-MM-DD[T]HH:mm:ss.SSSSSSS[Z]')

提交初始化后删除某些帖子数据 - javascript

在初始化提交之后但在将数据发送到处理页面之前,是否可以过滤$ _POST表单数据?我想象过程的方式:提交->收集$ _POST数据->发送数据我想做的事:提交->收集$ _POST数据->删除某些元素->发送数据这样就不必更改处理页面以过滤掉不希望接收的元素了吗? javascript大神给出的解决方案 当然可以,您可以在JS …

写一行到javascript文件 - javascript

我正在使用数组来显示网站中的一些图像:var paintingImages; paintingImages = [ { url: 'images/objects/ron.jpg', alt: 'ron' } ]; 该js代码写在paintings.js中,我的主要js代码写在main.js文件中我已经为艺术家制作了这个…

Javascript + Python:将数组发送到Python脚本,将结果返回给Javascript - javascript

我想建立一个网页,该网页通过Javascript API进行许多Facebook状态更新,并将它们分类到一个数组中。然后,我想将此数组发送到Python脚本,该脚本可以专门使用NLTK.进行语言分析。在Python中获得合适的结果后,我想将结果从该脚本返回到Javascript,以显示给用户等。听起来可能吗? javascript大神给出的解决方案 是的,完…

在JavaScript中运行方法C# - javascript

打扰一下,我有这种C#asp方法。受保护的无效btnSave_Click(对象发送者,EventArgs e)有谁知道我该如何发送脚本给您?可以办到?。 javascript大神给出的解决方案 是的,那可以做到。为此,您在.aspx.cs页中创建了函数,然后单击保存按钮上的代码将其复制到函数中,然后执行以下步骤。//Call cs method from J…

如何从客户端将数据插入数据库? - javascript

我是Web开发的初学者,可以访问cpanel上托管的网站,并且需要对其进行一些更改。这个网站的后端是由蛋糕PHP制作的,我想使用ajax从客户端将一些数据插入其数据库。问题是我不知道如何获取负责插入数据库的PHP文件的URL。参见下面的代码:var xhttp = newXMLHttpRequest(); xhttp.onreadystatechange= …