Rest Swagger和JWT令牌身份验证

Rest Swagger和JWT令牌身份验证,rest,authentication,jwt,swagger,Rest,Authentication,Jwt,Swagger,我正在构建一些招摇过市的文档,一切都很好,只是我希望页面能够以交互方式工作,所以在选择编辑器或UI时,如果我点击授权按钮,我会调用我的身份验证URL,该URL构建JWT令牌,然后在后续请求中使用 我计划向API客户机颁发一个API访问密钥和一个秘密访问密钥,并希望访问一个身份验证页面,该页面将处理这些密钥并构建JWT令牌 我突然想到,如果我能够正确地定义如何在大摇大摆中实现这一点,那么我将拥有一个现成的测试客户机,然后用于我的新代码 是的,这是我第一次使用JWT,我还没有构建代码。你能说“API

我正在构建一些招摇过市的文档,一切都很好,只是我希望页面能够以交互方式工作,所以在选择编辑器或UI时,如果我点击授权按钮,我会调用我的身份验证URL,该URL构建JWT令牌,然后在后续请求中使用

我计划向API客户机颁发一个API访问密钥和一个秘密访问密钥,并希望访问一个身份验证页面,该页面将处理这些密钥并构建JWT令牌

我突然想到,如果我能够正确地定义如何在大摇大摆中实现这一点,那么我将拥有一个现成的测试客户机,然后用于我的新代码


是的,这是我第一次使用JWT,我还没有构建代码。你能说“API优先”吗

这就是我如何将Swagger与JWT身份验证结合使用:

  • 编写一个Express.js API端点以生成JWT
  • 使用上述端点创建一个招摇过市路径来检索JWT
  • 在swagger.yaml根级别中:

    securityDefinitions:  
      JWT:  
        type: apiKey  
        in: header  
        name: access_token  
    
  • 在swagger.yaml路径中:

    security  
     -JWT: []
    
这将在浏览器上的Swagger UI中显示授权按钮

  • 在单击上面的授权按钮时弹出的身份验证窗口中输入上面生成的JWT
  • 现在,JWT将与请求头一起传递

希望这可以帮助其他人。

使用Swagger可以保存您的令牌并自动将令牌应用于您的所有请求

以下是您需要添加到Swagger Docket配置中的内容:

@Bean
public Docket newsApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            .securitySchemes(Lists.newArrayList(apiKey()))
            .securityContexts(Lists.newArrayList(securityContext()))
            .apiInfo(generateApiInfo());
}

@Bean
SecurityContext securityContext() {
    return SecurityContext.builder()
            .securityReferences(defaultAuth())
            .forPaths(PathSelectors.any())
            .build();
}

List<SecurityReference> defaultAuth() {
    AuthorizationScope authorizationScope
            = new AuthorizationScope("global", "accessEverything");
    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
    authorizationScopes[0] = authorizationScope;
    return Lists.newArrayList(
            new SecurityReference("JWT", authorizationScopes));
}

private ApiKey apiKey() {
    return new ApiKey("JWT", "Authorization", "header");
}
@Bean
公共摘要新闻API(){
返回新摘要(DocumentationType.SWAGGER_2)
.选择()
.api(RequestHandlerSelectors.any())
.path(路径选择器.any())
.build()
.securitySchemes(list.newArrayList(apiKey()))
.securityContext(列表.newArrayList(securityContext()))
.apinfo(generateApiInfo());
}
@豆子
SecurityContext SecurityContext(){
返回SecurityContext.builder()
.securityReferences(defaultAuth())
.forpath(路径选择器.any())
.build();
}
列表defaultAuth(){
授权范围授权范围
=新授权范围(“全局”、“访问一切”);
AuthorizationScope[]authorizationScopes=新的AuthorizationScope[1];
authorizationScopes[0]=authorizationScope;
return Lists.newArrayList(
新证券参考(“JWT”,授权范围);
}
私有ApiKey ApiKey(){
返回新的ApiKey(“JWT”、“授权”、“标题”);
}
然后,当您的招摇过市用户界面加载时,您将能够看到“授权”按钮

您可以保存您的代币,请确保在代币前面添加“持票人”

看一看