如何更改 jwt 访问令牌的附加信息

Posted

技术标签:

【中文标题】如何更改 jwt 访问令牌的附加信息【英文标题】:How to change an additional information of jwt access token 【发布时间】:2019-12-30 09:14:54 【问题描述】:

我正在使用 Spring Security 并使用 JWT 作为访问令牌,当客户端将访问令牌发送到服务器时,我必须更改附加信息(元数据)这个令牌并返回一个新的。

我怎样才能做到这一点?

我尝试使用此代码但无法正常工作

        String authorization = Context.getHeader("Authorization");

        if (authorization != null) 
            String tokenValue = authorization.replace("Bearer", "").trim();
            OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
            accessToken.getAdditionalInformation().put("activeProfileId", defaultProfileId);
            return accessToken.getValue();
        

        return null;

【问题讨论】:

你使用的是什么 spring-security-oauth2 版本? 【参考方案1】:

您应该从令牌中获取元数据(“声明”),然后将它们添加到将返回新令牌的新 JWT 构建器。必须在 HttpResponse 中输入新的 JWT 才能将其转发给客户端。取而代之的是,客户端必须实现一个拦截器,以便以一种舒适且透明的方式检索它。

您必须以 HashMap 的形式获取所有附加信息并将它们放在 OAuth2Authentication 中。 ***.com/a/19057480/11951081

在ajax中应该是:

https://api.jquery.com/category/ajax/global-ajax-event-handlers/

$.ajaxSetup(
    beforeSend: function (xhr) 
        xhr.setRequestHeader('Authorization', <Jwt>)
    ,
    success:function(event,jqXHR,ajaxOptions,data )
        console.log(ajaxOptions.getResponseHeader('Authorization'))
    
)

【讨论】:

感谢您的回答,但是如何从当前令牌生成 jwt 令牌? 您必须将所有附加信息作为 HashMap 获取并将它们放在 OAuth2Authentication 中。 ***.com/a/19057480/11951081

以上是关于如何更改 jwt 访问令牌的附加信息的主要内容,如果未能解决你的问题,请参考以下文章

仅在 JWT 令牌中而不是在 OAuth2 令牌中添加附加信息

如何将一些附加字段添加到此 Spring Boot 服务生成的 JWT 令牌中?

如何在身份服务器 4/身份验证代码流中请求访问令牌的附加声明?

如何将我的 JWT 令牌附加到每个 axios 调用?

如何在 Slim 3 响应标头中附加 JWT 令牌

如何在使用客户端凭据授予流程时在 JWT 令牌中附加或包含用户身份(用户名或电子邮件地址)