返回介绍

文档

中间件

OAS 简介

实战指南

3.2 授权码模式 authorization_code

发布于 2022-12-06 22:06:15 字数 4498 浏览 0 评论 0 收藏 0

以Spring Security为例,为了达到快速演示效果,授权服务器和资源服务器都在同一个工程中

完整代码示例请参考knife4j-spring-oauth2-authorization_code

授权码模式需要服务端配置Knife4j的回调地址 webjars/oauth/oauth2.html

部分示例代码:

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
//授权码模式(authorization code)
clients.inMemory()
.withClient("app1").secret(noOpPasswordEncoder.encode("123"))
.authorizedGrantTypes("authorization_code")
.redirectUris(
"http://localhost:18010/webjars/oauth/oauth2.html")
.scopes("read","write","reads","writes");
}

创建Docket对象时,设置OAuth2的授权类型,示例代码如下:

查看详细代码
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {

@Bean
public Docket productApi() {
//schema
List<GrantType> grantTypes=new ArrayList<>();
//授权码模式AuthorizationCodeGrant
TokenRequestEndpoint tokenRequestEndpoint=new TokenRequestEndpoint("http://localhost:18010/oauth/authorize","app1","123");
TokenEndpoint tokenEndpoint=new TokenEndpoint("http://localhost:18010/oauth/token","access_token");
AuthorizationCodeGrant authorizationCodeGrant=new AuthorizationCodeGrant(tokenRequestEndpoint,tokenEndpoint);
grantTypes.add(authorizationCodeGrant);
OAuth oAuth=new OAuthBuilder().name("oauth2")
.grantTypes(grantTypes).build();
//context
//scope方位
List<AuthorizationScope> scopes=new ArrayList<>();
scopes.add(new AuthorizationScope("read","read resources"));
scopes.add(new AuthorizationScope("write","write resources"));
scopes.add(new AuthorizationScope("reads","read all resources"));
scopes.add(new AuthorizationScope("writes","write all resources"));

SecurityReference securityReference=new SecurityReference("oauth2",scopes.toArray(new AuthorizationScope[]{}));
SecurityContext securityContext=new SecurityContext(Lists.newArrayList(securityReference),PathSelectors.ant("/api/**"));
//schemas
List<SecurityScheme> securitySchemes=Lists.newArrayList(oAuth);
//securyContext
List<SecurityContext> securityContexts=Lists.newArrayList(securityContext);
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xiaominfo.knife4j.oauth2.web"))
.paths(PathSelectors.any())
.build()
.securityContexts(securityContexts)
.securitySchemes(securitySchemes)
.apiInfo(apiInfo());


}



private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("knife4j-oauth2-demo").description("")
.termsOfServiceUrl("https://doc.xiaominfo.com")
.contact(new Contact("Developers", "https://gitee.com/xiaoym/knife4j", ""))
.license("Open Source")
.licenseUrl("\"https://www.apache.org/licenses/LICENSE-2.0")
.version("1.0.0")
.build();

}


}

最终呈现界面如下:

输入我们在配置文件中定义的clientId及clientSecret,然后点击Authorize按钮,最终跳转授权界面,如下图:

此时,选择进行授权即可

授权完成后,测试我们再我们的接口中,就会看到我们的参数 Authorization 值已经更新了,如下图:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文