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

如何使用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 我总是会看到一个弹出窗口(身份验证),要求我输入用户名和密码。但无论我进入那里,我都不会经过。那么到底哪里出了

  • 我有一个使用oauth gem从google oauth1迁移到oauth2的脚本 一切似乎都是正确的,我无法检测到标头的任何问题,但它仍然响应: 以下是标题: 正在打开与帐户的连接。谷歌。通讯:443。。。已打开帐户的启动SSL。谷歌。通讯:443。。。已建立SSL - - - - - - - - - - - - 正在读取全部。。。 - 读取90字节连接关闭 代码如下: 有什么想法吗?