を失敗しました:Nodejsは、.NETからJWTトークンを検証し、私は(System.IdentityModel.Tokens.Jwt付き)このC#コードで、.NETからトークンを作成
var keybytes = Convert.FromBase64String("MYCUSTOMCODELONGMOD4NEEDBEZE");
var signingCredentials = new SigningCredentials(
new InMemorySymmetricSecurityKey(keybytes),
SecurityAlgorithms.HmacSha256Signature,
SecurityAlgorithms.Sha256Digest);
var nbf = DateTime.UtcNow.AddDays(-100);
var exp = DateTime.UtcNow.AddDays(100);
var payload = new JwtPayload(null, "", new List<Claim>(), nbf, exp);
var user = new Dictionary<string, object>();
user.Add("userId", "1");
payload.Add("user", user);
payload.Add("success", true);
var jwtToken = new JwtSecurityToken(new JwtHeader(signingCredentials), payload);
var jwtTokenHandler = new JwtSecurityTokenHandler();
var resultToken = jwtTokenHandler.WriteToken(jwtToken);
私はnodejsにresultToken
を送信し、(とそれを検証しますjsonwebtoken library):
var jwt = require('jsonwebtoken');
var result = jwt.verify(
resultToken,
new Buffer('MYCUSTOMCODELONGMOD4NEEDBEZE').toString('base64'),
{ algorithms: ['HS256'] },
function(err, decoded) {
if (err) {
console.log('decode token failed with error: '+ JSON.stringify(err));
}
}
);
エラー:無効な署名があります。 resultToken内容:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0OTQ4MTMxMTUsIm5iZiI6MTQ3NzUzMzExNSwidXNlciI6eyJ1c2VySWQiOiIxIn0sInN1Y2Nlc3MiOnRydWV9.4bjYyIUFMouz-ctFyxXkJ_QcJJQofCEFffUuazWFjGw
は、私が上記の署名(MYCUSTOMCODELONGMOD4NEEDBEZE
)と秘密をbase64でjwt.io上のデバッグ、それをチェックしてエンコード持っている、それは大丈夫です。
私はC#コードでkeybytes
をchagingによってbase64エンコードせずに署名を試みた:
var keybytes = Encoding.UTF8.GetBytes("MYCUSTOMCODELONGMOD4NEEDBEZE");
そしてそれはnodejsで正常に検証しました。だから私は問題が私のnodejsコードからbase64エンコードされた署名を確認するときに来ると思います。私はいくつかのオプションがトークンやsomethingsを確認するときに逃したか?
は、この[https://runkit.com/589803649a353c0015f87d57/589803649a353c0015f87d58/branches/master](https://runkit.com/589803649a353c0015f87d57/589803649a353c0015f87d58/branches/master)とその作業罰金を確認してください。 – Thennarasan