首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Spring boot在Keycloak中设置redirect_uri

如何使用Spring boot在Keycloak中设置redirect_uri
EN

Stack Overflow用户
提问于 2019-01-13 05:14:29
回答 2查看 4.9K关注 0票数 6

我在Spring Boot应用程序中使用了Keycloak,但是我不知道如何提供我自己的重定向uri

这是我的配置

代码语言:javascript
复制
keycloak:
    use-resource-role-mappings: true
    realm: customer-realm
    resource: web-frontend
    token-minimum-time-to-live: 30
    principal-attribute: preferred_username
    credentials:
        secret: 321321321-88a2-424c-bb4c-2312312321
    auth-server-url: http://auth.customer.mydomain.tld:9080/auth

我尝试用以下方式设置redirect_uri

代码语言:javascript
复制
   <a href="/login?redirect_uri=http://localhost:8443/customer/account">Login</a>

当然,我已经将此URI添加到我的领域设置中。

但是当用户单击该链接时,它看起来如下所示

代码语言:javascript
复制
http://auth.customer.mydomain.tld:9080/auth/realms/customer-realm/protocol/openid-connect/auth?response_type=code&client_id=web-frontend&redirect_uri=http%3A%2F%2Flocalhost%3A8443%2Fsso%2Flogin&state=e81ad405-8a83-4e84-a155-2f1275f4390b&login=true&scope=openid

如何提供我自己的重定向URI?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-05-28 19:58:30

我不知道这个问题是否仍然相关,但我偶然发现了同样的问题。尽管有可能通过配置keycloak.redirect-rewrite-rules.pathOld=pathNew重写URI的一部分,但这不适用于授权,即域名。但是重定向uri的域名取自请求的Host报头,因此适当地设置该报头是足够的,例如在代理中。

或者,您可能需要注入一个自定义的PostProcessor,它最终会注入一个带有重写的getRequestUrl()的子类OAuthRequestAuthenticator。草绘的代码看起来像这样:

代码语言:javascript
复制
@Component
public class KeycloackAuthenticationProcessingFilterPostProcessor implements BeanPostProcessor {

    private static final Logger logger = LoggerFactory.getLogger(KeycloackAuthenticationProcessingFilterPostProcessor.class);

    private void process(KeycloakAuthenticationProcessingFilter filter) {
        filter.setRequestAuthenticatorFactory(new SpringSecurityRequestAuthenticatorFactory() {
            @Override
            public RequestAuthenticator createRequestAuthenticator(HttpFacade facade, HttpServletRequest request, KeycloakDeployment deployment, AdapterTokenStore tokenStore, int sslRedirectPort) {
                return new SpringSecurityRequestAuthenticator(facade, request, deployment, tokenStore, sslRedirectPort) {

                    @Override
                    protected OAuthRequestAuthenticator createOAuthAuthenticator() {
                        return new OAuthRequestAuthenticator(this, facade, deployment, sslRedirectPort, tokenStore) {

                            @Override
                            protected String getRequestUrl() {
                                return "http://localhost:8080";
                            }
                        };
                    }

                };
            }
        });
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof KeycloakAuthenticationProcessingFilter) {
            logger.info("Injecting Custom handler...");
            process(((KeycloakAuthenticationProcessingFilter) bean));
        }
        return bean;
    }
}

因为我有一个代理,所以我选择了简单的路径,并相应地调整了Host标头。

票数 3
EN

Stack Overflow用户

发布于 2019-05-23 18:26:19

我们有一个spring引导应用程序,它通过配置来设置:

代码语言:javascript
复制
@Configuration
public class Config {
    @Value("${app.client.id}")
    private String clientId;

    @Value("${app.client.secret}")
    private String clientSecret;

    @Value("${auth.server.hostname}")
    private String authServerHost;

    @Value("${auth.server.port}")
    private String authServerPort;

    @Bean
    public SecurityConfiguration securityInfo() {
        Map<String, Object> additionalQueryStringParams = new HashMap<>();
        additionalQueryStringParams.put("redirect_uri", 
          "http://" + authServerHost + ":" + authServerPort + "/sso/login");
        return new SecurityConfiguration(clientId, clientSecret, "", "", "", additionalQueryStringParams, false);
    }
}

也许这也适用于你?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54163924

复制
相关文章

相似问题

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