如何配置OAuth授权URL

时间:2019-01-28 00:32:44

标签: open-liberty microprofile

我有一个使用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吗?

干杯。

1 个答案:

答案 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,还提供了覆盖tokenUrlrefreshUrl等的功能。除了implicit之外,OAuthFlows还提供authorizationCodeclientCredentails等。此外,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  ....