为 bearer auth 添加 swagger 注释
Add a swagger annotation for bearer auth
我正在开发 dropwizard REST 服务。
我使用 https://bitbucket.org/b_c/jose4j/wiki/Home
添加了带有 jwt 的身份验证
令牌必须进入授权header
Authorization: Bearer [TOKEN]
我想找到在 swagger-ui.
上添加一些 swagger 注释以获得授权 header 的好方法
我找到了解决方法,隐藏身份验证参数并使用 @HeaderParam
添加虚拟参数
@POST
@Path("/test/")
public Foo postBar(
@Auth @ApiParam(hidden = true) Principal user,
@ApiParam("data") Foo bar,
@HeaderParam(value="Authorization")String dummy)
这将添加到参数中:
{
"name" : "Authorization",
"in" : "header",
"required" : false,
"type" : "string"
}
如果我把 @HeadParam
放在 Principal user
上,我会在 运行 时间:
Caused by: org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public java.util.Map com.foo.bar.AppResource.get(java.security.Principal) at index 0.; source='ResourceMethod{httpMethod=GET, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.mykronoz.data.tracking.resources.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@6374d682]}, definitionMethod=public java.util.Map com.foo.bar.AppResource.get(java.security.Principal), parameters=[Parameter [type=interface java.security.Principal, source=Authorization, defaultValue=null]], responseType=java.util.Map<java.lang.String, java.lang.Object>}, nameBindings=[]}']
有更好的方法吗?
如果添加 swaggerdefinition
@SwaggerDefinition(
securityDefinition = @SecurityDefinition(
apiKeyAuthDefinitions = {
@ApiKeyAuthDefinition(key = "user", name = "Authorization", in = ApiKeyLocation.HEADER)
}
)
)
然后您将可以使用 swagger ui 的 'Authorize' 功能。将您的 "Bearer XXX...." 字符串添加为 API 键应该会导致端点被调用,授权 header 设置您想要的方式并将用户字段设置为其值。
警告:我还没有看到这个工作 end-to-end 因为我对令牌本身有问题,但似乎我得到了正确的东西。
我正在开发 dropwizard REST 服务。 我使用 https://bitbucket.org/b_c/jose4j/wiki/Home
添加了带有 jwt 的身份验证令牌必须进入授权header
Authorization: Bearer [TOKEN]
我想找到在 swagger-ui.
上添加一些 swagger 注释以获得授权 header 的好方法我找到了解决方法,隐藏身份验证参数并使用 @HeaderParam
@POST
@Path("/test/")
public Foo postBar(
@Auth @ApiParam(hidden = true) Principal user,
@ApiParam("data") Foo bar,
@HeaderParam(value="Authorization")String dummy)
这将添加到参数中:
{
"name" : "Authorization",
"in" : "header",
"required" : false,
"type" : "string"
}
如果我把 @HeadParam
放在 Principal user
上,我会在 运行 时间:
Caused by: org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public java.util.Map com.foo.bar.AppResource.get(java.security.Principal) at index 0.; source='ResourceMethod{httpMethod=GET, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.mykronoz.data.tracking.resources.AppResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@6374d682]}, definitionMethod=public java.util.Map com.foo.bar.AppResource.get(java.security.Principal), parameters=[Parameter [type=interface java.security.Principal, source=Authorization, defaultValue=null]], responseType=java.util.Map<java.lang.String, java.lang.Object>}, nameBindings=[]}']
有更好的方法吗?
如果添加 swaggerdefinition
@SwaggerDefinition(
securityDefinition = @SecurityDefinition(
apiKeyAuthDefinitions = {
@ApiKeyAuthDefinition(key = "user", name = "Authorization", in = ApiKeyLocation.HEADER)
}
)
)
然后您将可以使用 swagger ui 的 'Authorize' 功能。将您的 "Bearer XXX...." 字符串添加为 API 键应该会导致端点被调用,授权 header 设置您想要的方式并将用户字段设置为其值。
警告:我还没有看到这个工作 end-to-end 因为我对令牌本身有问题,但似乎我得到了正确的东西。