我有一个使用MP-OpenApi的JAX-RS应用程序,以使用OpenLiberty提供OpenAPI UI。我的API使用OAuth2隐式流进行了身份验证。当前使用注释来配置,例如:
@SecurityScheme(
securitySchemeName = JaxRsApplication.OAUTH2_SECURITY_SCHEME_NAME,
type = SecuritySchemeType.OAUTH2,
flows = @OAuthFlows(
implicit = @OAuthFlow(
authorizationUrl = "https://auth-server/connect/authorize",
scopes = @OAuthScope(name = "some-api-scope", description = "Some API Scope"))))
我的目标是在配置文件中配置authorizationUrl值,而不是在批注中对其进行硬编码,以便我可以将其配置为CI / CD步骤用于不同的服务器环境。能做到吗?
还可以选择一些范围并自动在OpenAPI UI中填充客户端ID吗?
干杯。
答案 0 :(得分:1)
关于Microprofile OpenAPI Spec: OASFilter,我们可以覆盖authorizationUrl
,如下例:-
package my.filter;
import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.openapi.OASFilter;
import org.eclipse.microprofile.openapi.models.security.SecurityScheme;
public class DemoOASFilter implements OASFilter {
@Override
public SecurityScheme filterSecurityScheme(final SecurityScheme securityScheme) {
Config config = ConfigProvider.getConfig();
String myUrl = config.getValue("my.url",
String.class);
securityScheme.getFlows().
getImplicit().
setAuthorizationUrl(myUrl);
return securityScheme;
}
}
然后按照下面的示例,将完全限定的类名作为mp.openapi.filter
的值放在META-INF/microprofile-config.properties
上
mp.openapi.filter=my.filter.DemoOASFilter
my.url=http://some/url
OAuthFlow不仅覆盖authorizationUrl
,还提供了覆盖tokenUrl
,refreshUrl
等的功能。除了implicit
之外,OAuthFlows还提供authorizationCode
,clientCredentails
等。此外,OASFilter界面使我们可以覆盖更多内容,例如APIResponse
,tag
,server
等。
Microprofile: Config
Config config = ConfigProvider.getConfig();
String myUrl = config.getValue("my.url",
String.class);
如上例所示,我尝试将URL配置放入META-INF/microprofile-config.properties
,但未实现,因为它给了我java.util.NoSuchElementException
。
无论如何实现environment variable
和system properties
。
docker run -it \
--env my.url=http://some/url \
....
java -Dmy.url=http://some/url -jar ....