微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

生成 JWS 时清空负载

如何解决生成 JWS 时清空负载

我的目标是创建一个未加密的签名令牌。我正在像这样生成我的 JWT:

private const string C_ISSUER_SIGNINGKEY = "kXp2s5v8y/B?D(G+KbPeShVmYq3t6w9z";
private const JweAlgorithm JWE_ALGO = JweAlgorithm.DIR;
private const JweEncryption JWE_ENCR = JweEncryption.A128CBC_HS256;

public string Generatetoken(Dictionary<string,object> aPayload,TimeSpan aExpirationTime)
{
   var aNowMs = DateTime.Now.ToUniversalTime().Subtract(
                    new DateTime(1970,1,DateTimeKind.Utc)
                    ).TotalMilliseconds;
   if (aExpirationTime.TotalMilliseconds > 0)
   {
       var lExp = aNowMs + aExpirationTime.TotalMilliseconds;
       aPayload.Add("exp",lExp);
   }
   var aSecretKey = Encoding.UTF8.GetBytes(C_ISSUER_SIGNINGKEY);
   var aToken = JWT.Encode(aPayload,aSecretKey,JWE_ALGO,JWE_ENCR);
   return aToken;
}

使用这个时,我得到一个这样的令牌:

var lPayLoad = new Dictionary<string,object>()
{
    { "emailAddress","peter@email.com" },{ "password","password" }
};
var lToken = lEncryptor.Generatetoken(lPayLoad,new TimeSpan(50,50,50));

然后我会得到一个这样的令牌:eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..4lvBJr_Q0X_hj5OL5rdMsA.d0S--Vdm0JDkjYcN1Djnx4KV3DbehzwkHlvDKlFQuAk.DVS5O8zmJr2l1axenk2Fgw

(注意,令牌中的payload部分是空的)

当我尝试对其进行解码时(通过 jwt.Io 或任何其他工具),我无法验证签名者,也无法获得有效负载

我到底做错了什么?

解决方法

在您的代码中,您对签名令牌 (JWS) 使用了错误的算法类型。

JweAlgorithm JWE_ALGO = JweAlgorithm.DIR

var aToken = JWT.Encode(aPayload,aSecretKey,JWE_ALGO,JWE_ENCR);

而且 JWE_ENCR 参数在这种情况下是错误的。

对于使用 jose-jwt 创建的 JWS,您需要选择合适的签名算法,例如:

 JwsAlgorithm.HS256

 JwsAlgorithm.HS512
 JwsAlgorithm.RS256
 JwsAlgorithm.RS512
 JwsAlgorithm.ES256

等等。 (Reference)

如果您将行更改为:

JWT.Encode(aPayload,JwsAlgorithm.HS256);

它应该可以正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?