我有使用MP-OpenAPI的是提供一种使用一个OpenLiberty UI OpenAPI的一个JAX-RS应用程序。我的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的用户界面的客户端id?
干杯。
关于向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
不仅要覆盖authorizationUrl
中,OAuthFlow也为我们提供覆盖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 ....