【问题标题】:How to configure OAuth authorization URL如何配置 OAuth 授权 URL
【发布时间】:2019-06-20 23:55:20
【问题描述】:

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

干杯。

【问题讨论】:

    标签: open-liberty microprofile


    【解决方案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
    

    不仅覆盖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  ....
    

    【讨论】:

    • 哇,这正是我所缺少的。我会尝试所有这些。谢谢!
    猜你喜欢
    • 2016-09-11
    • 2016-08-12
    • 2013-03-16
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2014-10-13
    相关资源
    最近更新 更多