zoukankan      html  css  js  c++  java
  • Swagger整合Oauth2

    如果项目中使用了Oauth2.0,那么在每次请求接口的时候都需要在header上带上Authorization参数才可以正常访问,如下所示:

    项目用了Swagger在线接口文档组件,那么如何结合Oauth2.0,让调用接口的时候自动带上认证参数呢?

    以下就是Oauth2.0整合Swagger的步骤:

    关键代码

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        private static final String VERSION = "1.0.0";
        /**
         * 创建API
         */
        @Bean
        public Docket createRestApi(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    //指定接口包所在路径
                    .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                    .paths(PathSelectors.any())
                    .build()
                    //整合oauth2
                    .securitySchemes(Collections.singletonList(apiKey()))
                    .securityContexts(Collections.singletonList(securityContext()));
        }
    
        /**
         * 添加摘要信息
         */
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .contact(new Contact("JAVA日知录","http://javadaily.cn","jianzh5@163.com"))
                    .title("account-server接口文档")
                    .description("account-server接口文档")
                    .termsOfServiceUrl("http://javadaily.cn")
                    .version(VERSION)
                    .build();
        }
    
        private ApiKey apiKey() {
            return new ApiKey("Bearer", "Authorization", "header");
        }
    
    
        /**
         * swagger2 认证的安全上下文
         */
        private SecurityContext securityContext() {
            return SecurityContext.builder()
                    .securityReferences(defaultAuth())
                    .forPaths(PathSelectors.any())
                    .build();
        }
    
        private List<SecurityReference> defaultAuth() {
            AuthorizationScope authorizationScope = new AuthorizationScope("web", "access_token");
            AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
            authorizationScopes[0] = authorizationScope;
            return Collections.singletonList(new SecurityReference("Bearer",authorizationScopes));
        }
    }
    

    使用步骤

    • 使用postman调用认证中心接口获取access_token
      http://localhost:8090/auth-service/oauth/token
    {
      "access_token": "36034ff7-7eea-4935-a3b7-5787d7a65827",
      "token_type": "bearer",
      "refresh_token": "4baea735-3c0d-4dfd-b826-91c6772a0962",
      "expires_in": 36931,
      "scope": "web"
    }
    
    • 访问Swagger接口页面,点击Authorize接口进行认证,在弹出框中输入Bearer 36034ff7-7eea-4935-a3b7-5787d7a65827并点击认证按钮。

    • 在Swagger中正常请求接口

    经过以上几步可以看到接口请求会默认带上认证参数,小伙伴们又可以愉快的玩耍了!

  • 相关阅读:
    Python的collections之defaultdict的使用及其优势
    Python的collections之namedtuple的使用及其优势
    【转】Python 代码批量抓取免费高清图片!
    Python之Django之views中视图代码重复查询的优化
    【转】把sqlite3数据导入到MySQL中
    【转】项目搬迁,快捷导出环境依赖包到requirements.txt
    聊聊模板方法模式,装饰器模式以及AOP
    [算法]股票问题
    [数据]matplotlib总结
    [算法]谷歌笔试题:Beautiful Numbers
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13295898.html
Copyright © 2011-2022 走看看