在每个API请求上重新生成JWT承载令牌

时间:2019-03-26 15:18:21

标签: asp.net-web-api jwt

我想针对服务器发出的每个请求重新生成承载令牌。

我不想为此目的使用刷新令牌。

有人可以建议我如何从通过授权标头传递的先前生成的令牌中重新生成带有新的过期标记的新令牌?

2 个答案:

答案 0 :(得分:0)

每次发出API请求之前,都要调用授权服务器的令牌端点。

答案 1 :(得分:0)

我创建了一个从DelegatingHandler类继承的MessageHandler过滤器,并重写了SendAsync方法。

我可以访问从请求中收到的原始承载令牌,可以对其进行解码并生成一个新令牌。生成新的API之后,我将其转储到响应中,这样它将在每个请求上执行,并且我们不需要管理单独的API

        string audienceId = Properties.Settings.Default.AudienceId;
        var issuer = Properties.Settings.Default.AngularHostURL;
        string symmetricKeyAsBase64 = Properties.Settings.Default.AudienceSecret;

        DateTime IssuedUtc = DateTime.UtcNow;
        DateTime ExpiresUtc = 
        IssuedUtc.AddMinutes(Properties.Settings.Default.TokenLifetimeInMinutes);
        var keyByteArray = TextEncodings.Base64Url.Decode(symmetricKeyAsBase64);
        var signingKey = new HmacSigningCredentials(keyByteArray);

        var identity = new ClaimsIdentity("JWT");

        foreach (var claim in claims)
            identity.AddClaim(claim);

        var tokennew = new JwtSecurityToken(issuer, audienceId, identity.Claims, 
        IssuedUtc, ExpiresUtc, signingKey);
        var handler = new JwtSecurityTokenHandler();
        var jwt = handler.WriteToken(tokennew);

        return jwt;