【问题标题】:How to get JWT token from response header?如何从响应头中获取 JWT 令牌?
【发布时间】:2021-04-20 20:05:23
【问题描述】:

我在 Spring Boot 中创建了我的第一个 REST API 并使用了 JWT 令牌。当我向我的 API 发送 POST 请求时,我的状态为 OK,并且在浏览器网络选项中,我可以看到带有 JWT 令牌的标头,如图所示。

但我不知道如何从响应标头中获取此令牌并将其保存在例如本地存储中。我尝试了很多东西,但没有任何效果。

这是我的 POST 请求:

fetch('http://localhost:8080/login', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
    username: 'linda',
    password: 'password'
    })
});

【问题讨论】:

  • 请注意,在响应正文中而不是在标头中返回 Bearer 令牌是一种标准做法。如果您无法控制它(跳过我评论的下一部分),这完全有道理,但是如果您可以控制它,我会重构您的解决方案以使用响应正文。它也会消除你的问题。

标签: javascript jquery spring spring-boot


【解决方案1】:

如果有人有同样的问题,就会有灵魂。 您必须将此 bean 添加到您的配置类中:

    @Bean
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("*"));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
    configuration.setAllowedHeaders(Arrays.asList("Authorization", "content-type", "x-auth-token"));
    configuration.setExposedHeaders(Arrays.asList("x-auth-token","Authorization"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

【讨论】:

    【解决方案2】:

    你必须使用response.headers

    fetch('http://localhost:8080/login', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            username: 'linda',
            password: 'password'
        })
    }).then(response => {
        console.log(response.headers.get('Authorization'))
    });
    

    【讨论】:

    • 我做到了,我在控制台中收到了一个标题“树”,我可以在其中展开列表并查看“删除”、“附加”等选项,但我没有在那里看到令牌,但仍然不知道如何从那里提取这个令牌。
    • 你的意思是console.log(response.headers.get('Authorization'))吗?如果是,我在控制台中得到空值。
    • 如果您希望前端访问 Authorization 标头,您的 Spring Boot API 将必须以 Authorization 的值回答标头 Access-Control-Expose-Headers,以便 Javascript 代码可以访问 Authorization标题。
    猜你喜欢
    • 2019-12-25
    • 2020-11-16
    • 2020-11-30
    • 2020-07-05
    • 1970-01-01
    • 2019-02-10
    • 2020-01-24
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多