当前位置: 首页 > 知识库问答 >
问题:

如何使用SpringdocOpen API3 Spec在OAuth2隐式流的标头中添加“授权:承载”

史默
2023-03-14

我正在从Springfox迁移到Springdoc Open Api 3,并尝试实现身份验证流:

目前,我已经实现了用于身份验证的隐式流。如下所示:

        @Bean
        public OpenAPI customOpenAPI()
        {
            String authorizeUrl = <authorize-url>;
    
            OAuthFlow oAuthFlow = new OAuthFlow();
            oAuthFlow.authorizationUrl(authorizeUrl);
            
            return new OpenAPI()
                .components(new Components()
                        .addSecuritySchemes("OAuth", new SecurityScheme()
                                .type(Type.OAUTH2)
                                .scheme("bearer")
                                .in(In.HEADER)
                                .bearerFormat("jwt")
                                .flows(new OAuthFlows().implicit(oAuthFlow))
                                )
                        );
            
        }

现在,问题是,我被正确地重定向到Keycloak服务器并且身份验证按预期工作,但是当我尝试执行来自Swagger UI的请求时,Authoration: Beger

我尝试了多种解决方案,比如在endpoint上添加安全方案要求,但都不起作用。我是不是错过了什么?还是我的实现流程错了?我需要在发送到后端的每个请求中使用承载令牌。


共有1个答案

岳正阳
2023-03-14

所以,在尝试了几乎所有的方法后,以下解决方案对我很有效:

return new OpenAPI()
    .components(new Components()
        .addSecuritySchemes("OAuth", new SecurityScheme()
            .type(Type.OAUTH2)
            .scheme("bearer")
            .bearerFormat("jwt")
            .in(In.HEADER)
            .name("Authorization")
            .flows(new OAuthFlows().implicit(oAuthFlow))))
            .addSecurityItem(new SecurityRequirement().addList("OAuth"));

因此,我的大部分配置都是正确的,但必须添加Security必备,它要求所有API在标头中包含授权令牌。

 类似资料:
  • 我对以下涉及oauth2的流程有一些问题: webapp1.xyz.com是具有授权代码授予类型的注册客户端,以下是当前流程: 用户登录并使用授权码重定向到webapp1.xyz.com webapp1.xyz.com交换访问令牌的授权代码并将其存储到会话 webapp1.xyz.com服务器端需要通过传递访问令牌调用webapp2.xyz.com api webapp1.xyz.com具有SPA

  • 问题内容: 这是我的第一篇文章。 我刚刚开始学习Go和Angular,并且尝试将angular应用程序连接到go api。我已经写了这两本书,并且一直坚持找出问题的根源。我以为这是一个CORS问题,但是如果我在Angular http请求中不包含代码的标题行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。 这两个应用程序都在本地运行,端口5000上的Go应用程序和4200端口上

  • 我们不允许寻求书籍、工具、软件库等推荐的问题。你可以编辑这个问题,以便用事实和引用来回答。 我正在通过DRF(Django-rest-framework)实现令牌认证。到目前为止,我知道在令牌认证中,您用服务器已经为每个用户生成的令牌来交换您的凭证。然后,您将该令牌放在API的每个请求头中,而不用担心cookies。 现在我知道如何生成令牌并写入视图以进行身份验证和颁发令牌。但是,我还没有弄清楚如

  • 使用“隐式”流,在资源所有者(即用户)给予访问权限后,客户端(可能是浏览器)将获得访问令牌。 然而,在“授权代码”流程中,客户端(通常是web服务器)只有在资源所有者(即用户)给予访问权限后才获得授权代码。使用该授权代码,客户机然后对API进行另一次调用,将client_id和client_secret与授权代码一起传递,以获得访问令牌。这里都描述得很好。 问题是:当“隐式”流接缝很好时,为什么还

  • 致力于使用Spring实现Oau2。我想实现隐式工作流: 我的配置文件: 到目前为止,这是有效的。数据库中还会生成一个用户。 问题如下。当我尝试执行以下请求时: http://localhost:8080/oauth/token?grant_type=authorization_code 我总是会看到一个弹出窗口(身份验证),要求我输入用户名和密码。但无论我进入那里,我都不会经过。那么到底哪里出了

  • 隐式许可是为用如JavaScript等脚本语言在浏览器中实现的客户端而优化的一种简化的授权码流程。在隐式许可流程中,不再给客户端颁发授权码,取而代之的是客户端直接被颁发一个访问令牌(作为资源所有者的授权)。这种许可类型是隐式的,因为没有中间凭据(如授权码)被颁发(之后用于获取访问令牌)。 当在隐式许可流程中颁发访问令牌时,发授权服务器不对客户端进行身份验证。在某些情况下,客户端身份可以通过用于向客