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

Swagger:授权令牌未传递到请求标头中

卢恩
2023-03-14

我使用springfox 2.9.2我有这样的api:

@Api(tags = "Users")
@RestController
@RequestMapping("users")
public class UsersController {

    @ApiOperation(value = "Creates a user")
    @ApiResponses(value = {
            @ApiResponse(code = 201, message = "user created"),
            @ApiResponse(code = 401, message = "not authorized")})

    @PostMapping(value = "/add")
    public ResponseEntity addUser(@Valid @RequestBody UserDTO userDTO) {
...
}

女巫来自身份验证服务器。我尝试在swagger中首次调用此服务器,并将其传递给像上面这样的控制器请求。所以我做

@Bean
    public Docket api() {
        final String swaggerToken = "";
        return new Docket(DocumentationType.SWAGGER_2)
            @Bean
    public      .select()
                .apis(RequestHandlerSelectors.basePackage("com.mbv.coros.notification.controller"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiEndPointsInfo())
                .securitySchemes(Arrays.asList(securityScheme()))
                .securityContexts(Arrays.asList(securityContext()))
                .useDefaultResponseMessages(false);
    }

private SecurityScheme securityScheme() {
        GrantType grantType = new ResourceOwnerPasswordCredentialsGrant(AUTH_SERVER + "/token");

SecurityScheme oauth = new OAuthBuilder().name("spring_oauth")
                .grantTypes(Arrays.asList(grantType))
                .scopes(Arrays.asList(scopes()))
                .build();
        return oauth;

private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .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));
    }

在Swagger ui上,授权调用成功返回了令牌,但它没有将令牌添加到请求头中。它会产生

curl -X GET "http://localhost:8080/users/get" -H "accept: */*" 

如果我像这样设置令牌:

.securitySchemes(Arrays.asList(apiKey()))
 private ApiKey apiKey() {
        return new ApiKey("JWT", AUTHORIZATION_HEADER, "header");
    }

共有1个答案

花和宜
2023-03-14

据我所知,Swagger仅在您配置令牌时才使用令牌,并且配置是使用Swagger UI页面右上角的“授权”按钮完成的。

因此,理想情况是:

>

  • 触发返回令牌的身份验证调用

    复制令牌;点击“授权”按钮,将JWT令牌粘贴到“不记名”中

    在此之后,所有后续调用都应使用此令牌,直到您按logout。

  •  类似资料:
    • 我有一个请求URI和一个令牌。如果我使用: 等等,我得到一个200并查看相应的JSON数据。所以,我安装了请求,当我试图访问这个资源时,我得到了一个403,可能是因为我不知道传递该令牌的正确语法。有人能帮我弄清楚吗?这就是我所拥有的: 我已经试过了: 但这些都不管用。

    • 我与React、Express、MongoDB的应用程序。 我想为Axios post请求传递带有标头的身份验证令牌。 但是,当我试图通过它,得到403错误(禁止)。 本地存储 我正在从本地存储中检索所有身份验证数据 Axios。邮递 我在这里调用axios post请求 API头和响应 这是我从浏览器中得到的响应 我的邮递员电话打得很好

    • 我正在尝试连接到FatSecret API。这是他们为oauth2授权提供的留档链接:https://platform.fatsecret.com/api/Default.aspx?screen=rapiauth2#using-token-api 我已经完成了第一步和第二步,现在我被困在第三步。我已经设法用“application/json”更新了标题,但我不确定我的调用是否包括我创建的令牌。我得

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

    • 我正在尝试从这个 API 调用中创建“UUID”,我正在使用 axios 和 vue.js。这是我的源代码。 但不幸的是,我得到了 在'访问XMLHttpRequesthttps://www.uuidtools.com/api/generate/v1'从原点'http://localhost:8080'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access c

    • 试图让OAuth2谷歌登录工作,这是我的应用程序发出的原始请求: : : : : 这是回应: 状态: null 对此的帮助将不胜感激。我试图在我的应用程序中设置OAuth2支持的“用X登录”功能,已经让脸书和推特没有问题地工作,也想让谷歌工作,但如果我不能解决这个问题,我恐怕我将不得不放弃谷歌Auth。