我有一个Java EE8应用程序,在该应用程序中,我使用OpenAPI注释来定义RESTendpoint,并自动生成一个昂首阔步的UI。对于身份验证,我使用JSON Web令牌(JWT)。
当我从邮递员发送请求时,一切都很好,但是,我不知道如何在我的昂首阔步的UI中添加一个承载令牌的字段。
我使用@securityscheme
注释定义我的安全方案:
@SecurityScheme(
securitySchemeName = "JWT",
description = "JWT authentication with bearer token",
type = SecuritySchemeType.HTTP,
scheme = "bearer",
bearerFormat = "Bearer [token]"
)
public class ApplicationConfig extends Application {
}
我尝试将此方案作为@securityrequirement
添加到资源的@openapidefinition
注释中,并直接添加到方法中。
@Path("/items")
@OpenAPIDefinition(
info = @Info(title = "Items resource", version = "v1"),
security = @SecurityRequirement(name = "JWT")
)
@Transactional(value = TxType.REQUIRES_NEW)
@Interceptors({RolesAllowedInterceptor.class})
@SecurityScheme(
securitySchemeName = "JWT",
description = "JWT authentication with bearer token",
type = SecuritySchemeType.HTTP,
scheme = "bearer",
bearerFormat = "Bearer [token]"
)
public class ItemsResource {
(...)
@GET
@Operation(description = "Returns the item list overview")
@APIResponse(responseCode = "200", description = "Valid response")
@APIResponse(responseCode = "401", description = "Authentication required")
@APIResponse(responseCode = "500", description = "Unexpected exception")
@Produces({MediaType.APPLICATION_JSON})
@SecurityRequirement(name ="JWT", scopes = "write: read")
@RolesAllowed({Constants.USER_ROLE_EXPERT})
public Response getItemListOverview() throws TechnicalException {
ItemListOverviewVO itemListOverviewVO = logic.getItemListOverview();
return Response.status(Status.OK).entity(itemListOverviewVO).build();
}
因此,我现在在OpenAPI JSON文件中有security
信息,但是UI中仍然没有用于授权参数的字段。
public Response getItemListOverview(@HeaderParam("Authorization") String bearerToken) throws TechnicalException {
现在我的UI中有一个授权字段,但是当我测试endpoint时,请求没有授权头。我在浏览器的网络分析中看不到它。
到目前为止,OpenAPI文档没有什么帮助。我是不是漏掉了什么?
关键是在@components()
中嵌入@securityscheme
注释,并将其作为参数传递给@openapidefinition
注释:
@OpenAPIDefinition(
info = @Info(title = "My application", version = "1.0.0"),
servers = {@Server(url = "/myapp", description = "localhost") },
security = @SecurityRequirement(name = "JWT"),
components = @Components(securitySchemes = @SecurityScheme(
securitySchemeName = "JWT",
description = "JWT authentication with bearer token",
type = SecuritySchemeType.HTTP,
scheme = "bearer",
bearerFormat = "Bearer [token]"))
)
public class ApplicationConfig extends Application {
}
我有以下配置: 我找到了解决方法——用以下方法标记每个独立endpoint: 但我不喜欢做这种重复的工作。 是否有一种方法可以使每个其他端都实现全球化?
我在做概念验证。我正在使用Azure Active Directory并试图在遗留项目中实现OAuth。 这个项目的一半使用Web表单,另一半直接通过JavaScript在另一个项目中调用WebAPI。 作为一个测试,我通过UseOpenIDConnectauthEntication的AuthorizationCodeReceed通知事件获得承载令牌。我使用以下代码将令牌快速写入调用WebAPI的
我在用阿斯匹林。网络应用程序 我很困惑。我已经使用JSON网络令牌。我明白这一点。已知经典的 JSON 网络令牌。标头、有效负载、签名、自包含。客户端可以查看索赔数据。 但是不记名令牌是什么呢?不记名令牌也是独立的。我们可以通过不记名令牌访问令牌的数据。客户端看不到索赔数据。 那我们为什么不使用不记名令牌呢?不记名代币不是标准吗?有没有像 JWT 持有者令牌这样的东西? 以及如何在 MVC Web
我有两个站点,一个用户登录并管理他们的帐户的站点和一个没有UI的站点,只不过是一个存储和检索内容的API。这两个站点都使用相同的Owin ASP. Net Idreal 2.0设置。UI站点使用cookie的原因很明显,API站点使用承载令牌。我需要能够使用当前用户身份验证从UI站点调用API方法/url。简而言之,我需要在UI站点中生成一个有效的承载令牌,以便在进行Rest API调用时添加到H
问题内容: 为了生成用于访问我们的API的32个字符的令牌,我们目前使用: 我已经读到,这种方法不是基于密码的安全性,因为它基于系统时钟,这将是一个更好的解决方案,因为它很难预测。 如果是这种情况,等效代码将是什么样? 我猜是这样的,但是我不知道这是否对… 我应该传递给函数什么长度也有意义? 问题答案: 这是正确的解决方案: