spring-boot - JWT 身份验证 Spring Boot 和 Swagger UI
问题描述
我有一个像这样的 SwaggerConfig:
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
public static final String AUTHORIZATION_HEADER = "Authorization";
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()))
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
private ApiKey apiKey() {
return new ApiKey("JWT", AUTHORIZATION_HEADER, "header");
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.build();
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope
= new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("JWT", authorizationScopes));
}
}
当我在 swagger ui 中测试 API 时,它会发出 JWT 罚款,但它仍然给出
{
"error": "Full authentication is required to access this resource"
}
在邮递员中尝试相同的令牌效果很好。
这是招摇的 ui curl:
curl -X GET "http://localhost:8082/api/helloadmin" -H "accept: */*" -H "Authorization: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJuYXoiLCJpc0FkbWluIjp0cnVlLCJleHAiOjE2MTk1MzA3MTUsImlhdCI6MTYxOTUxMjcxNX0.GvEuOYqIPuS98DqhDrtHDFhjXrtwhGjLfylEXwkPeRTGRoWxcwIAYBEawl2Bl5qoQrI2zQOjKZGDq3KEZuyALQ"
我究竟做错了什么?
解决方案
正确的标头格式是“授权:承载 [token]”
推荐阅读
- ios - 有没有办法让手表应用只支持新的苹果手表(4 及以上)?
- c - C中的单链表插入(指向指针的指针)
- elasticsearch - Filebeat 收获旋转文件
- ios - Swift - 从 GraphRequest 中获取 Facebook 的用户电子邮件
- unit-testing - 仅在单元测试时在方法中插入一行代码
- c++ - 访问映射中向量的最后一个元素 (C++)
- javascript - 如何使用 Puppeteer 截取表格?
- javascript - jQuery Tablesorter 不适用于日期
- javascript - 获取传单中所有标记的坐标列表
- python - 为什么在将 numpy 向量除以 numpy 范数时不能使用就地除法运算符