首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置OAuth授权URL

如何配置OAuth授权URL
EN

Stack Overflow用户
提问于 2019-01-28 00:32:44
回答 1查看 638关注 0票数 4

我有一个JAX应用程序使用MP来提供一个使用OpenAPI OpenLiberty的UI。我的API是使用OAuth2隐式流进行验证的。这是当前使用注释配置的,如下所示:

代码语言:javascript
复制
@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?

干杯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-05 11:37:01

若要重写URL,请执行

对于微轮廓OpenAPI规范: OASFilter,我们可以重写authorizationUrl,如下所示:

代码语言:javascript
复制
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中,如下所示

代码语言:javascript
复制
mp.openapi.filter=my.filter.DemoOASFilter
my.url=http://some/url

不仅是为了覆盖authorizationUrlOAuthFlow还为我们提供了重写tokenUrlrefreshUrl等等的功能。除了implicit之外,OAuthFlows还提供authorizationCodeclientCredentails和其他服务。此外,OASFilter接口也给我们提供了更多的覆盖,例如APIResponsetagserver等等。

Microprofile: Config集成

代码语言:javascript
复制
Config config = ConfigProvider.getConfig();
String myUrl  = config.getValue("my.url", 
                                String.class);

我尝试将META-INF/microprofile-config.properties配置作为上面的示例,但没有实现,因为它给了我一个java.util.NoSuchElementException

总之,实现了environment variablesystem properties

代码语言:javascript
复制
docker run -it \
    --env my.url=http://some/url \
    ....

java -Dmy.url=http://some/url -jar  ....
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54394218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档