在这个问题中, Erik需要在Node.js中生成一个安全的随机令牌.有crypto.randomBytes生成随机缓冲区的方法.但是,节点中的base64编码不是url-safe,它包含/而+不是-和_.因此,生成此类令牌的最简单方法是我发现的
require('crypto').randomBytes(48, function(ex, buf) {
token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-');
});
Run Code Online (Sandbox Code Playgroud)
有更优雅的方式吗?
尝试使用离子设置 auth0 时遇到问题。
但是,我认为它与它无关,它更像是一个加密 js / 配置问题。
这是我得到的错误:
main.7c4444f936ddaf5620f8.bundle.js:formatted:15919 ERROR Error:
Uncaught (in promise): TypeError: r.randomBytes is not a function
TypeError: r.randomBytes is not a function at n.generateProofKey (main.7c4444f936ddaf5620f8.bundle.js:formatted:844)
下面是我的加密 js 文件:
import * as crypto from 'crypto-js';
function base64UrlSafeEncode(string) {
return string.toString('base64')
.replace(/+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
function sha256(buffer) {
return crypto.createHash('sha256').update(buffer).digest();
}
exports.generateProofKey = function generateProofKey() {
var codeVerifier = base64UrlSafeEncode(crypto.randomBytes(32));
var codeChallenge = base64UrlSafeEncode(sha256(codeVerifier));
return { codeVerifier: codeVerifier, codeChallenge: codeChallenge };
};
exports.generateState = function …Run Code Online (Sandbox Code Playgroud)