我的目标是使用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= …