如何配置 OAuth 授权 URL

How to configure OAuth authorization 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"))))

我的目标是在配置文件中配置 authorizationUrl 值,而不是在注释中对其进行硬编码,这样我就可以在 CI/CD 步骤中为不同的服务器环境配置它。这能做到吗?

此外,有没有办法 select 某些范围并在 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;
    }
}

然后将我们的完全限定class名称作为mp.openapi.filter的值放在META-INF/microprofile-config.properties处,如下例

mp.openapi.filter=my.filter.DemoOASFilter
my.url=http://some/url

不仅覆盖了authorizationUrlOAuthFlow also provide us to override the tokenUrl, refreshUrl and so on. Apart from the implicit, the OAuthFlows also provides the authorizationCode, clientCredentails and others as well. Furthermore the OASFilter接口给了我们覆盖更多,例如APIResponsetagserver

Microprofile: Config

整合
Config config = ConfigProvider.getConfig();
String myUrl  = config.getValue("my.url", 
                                String.class);

我试过将 URL 配置放到 META-INF/microprofile-config.properties 上面的例子中,但没有实现,因为它给了我一个 java.util.NoSuchElementException.

总之 environment variablesystem properties 都实现了。

docker run -it \
    --env my.url=http://some/url \
    ....

java -Dmy.url=http://some/url -jar  ....