open-liberty - 如何配置 OAuth 授权 URL
问题描述
我有一个使用 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"))))
我的目标是在配置文件中配置 authenticationUrl 值,而不是在注释中硬编码它,以便我可以将其配置为不同的服务器环境作为 CI/CD 步骤。这可以做到吗?
另外,有没有办法选择一些范围并在 OpenAPI UI 中自动填充客户端 ID?
干杯。
解决方案
覆盖 URL
关于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
at 的值,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 ....
推荐阅读
- python - Selenium webdriver 使其轻量级(内存方面)没有无头
- flutter - 如何截取当前小部件并保存在画廊中-Flutter
- javascript - Tensorflow.js 令人困惑的内存泄漏问题?
- javascript - 为什么 Vue.js 实例在 Firefox 扩展开发中不起作用?
- python - 给定数据集的线性插值
- sql - 我想知道我是否可以在另一个关键字中使用 SQL 关键字,例如 COUNT(DISTINCT(
)) - python - pyqt5 QTableWidget 仅在选择整行时删除行
- kubernetes - 如何在多主部署中监控 kube-apiserver?
- django - Django - 在查询中加入 3 个模型
- node.js - 必须使用 import 加载 Babel 模块中的 ES 模块 NODEJS 错误