diff --git a/adapters/oidc/adapter-core/src/main/java/org/keycloak/adapters/AdapterDeploymentContext.java b/adapters/oidc/adapter-core/src/main/java/org/keycloak/adapters/AdapterDeploymentContext.java index 5625c60b28..701cad872f 100755 --- a/adapters/oidc/adapter-core/src/main/java/org/keycloak/adapters/AdapterDeploymentContext.java +++ b/adapters/oidc/adapter-core/src/main/java/org/keycloak/adapters/AdapterDeploymentContext.java @@ -206,6 +206,16 @@ public class AdapterDeploymentContext { public void setBearerOnly(boolean bearerOnly) { delegate.setBearerOnly(bearerOnly); } + + @Override + public boolean isAutodetectBearerOnly() { + return delegate.isAutodetectBearerOnly(); + } + + @Override + public void setAutodetectBearerOnly(boolean autodetectBearerOnly) { + delegate.setAutodetectBearerOnly(autodetectBearerOnly); + } @Override public boolean isEnableBasicAuth() { diff --git a/testsuite/integration-arquillian/test-apps/servlets/src/main/java/org/keycloak/testsuite/adapter/servlet/ProductServlet.java b/testsuite/integration-arquillian/test-apps/servlets/src/main/java/org/keycloak/testsuite/adapter/servlet/ProductServlet.java index 2580813b9d..ce07a5dc6f 100644 --- a/testsuite/integration-arquillian/test-apps/servlets/src/main/java/org/keycloak/testsuite/adapter/servlet/ProductServlet.java +++ b/testsuite/integration-arquillian/test-apps/servlets/src/main/java/org/keycloak/testsuite/adapter/servlet/ProductServlet.java @@ -38,6 +38,9 @@ public class ProductServlet extends HttpServlet { pw.printf("%s", "Product Portal"); pw.println("iPhone"); pw.println("iPad"); + String x = req.getParameter("encodeTest"); + String encodeTest= Boolean.toString("a"); pw.flush(); diff --git a/testsuite/integration-arquillian/tests/base/offline-token.txt b/testsuite/integration-arquillian/tests/base/offline-token.txt new file mode 100644 index 0000000000..ec747fa47d --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/offline-token.txt @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/InputPortalNoAccessToken.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/InputPortalNoAccessToken.java new file mode 100644 index 0000000000..5daa0de2b6 --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/InputPortalNoAccessToken.java @@ -0,0 +1,56 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.testsuite.adapter.page; + +import org.jboss.arquillian.container.test.api.OperateOnDeployment; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.net.URL; + +/** + * + * @author vramik + */ +public class InputPortalNoAccessToken extends SAMLServlet { + + public static final String DEPLOYMENT_NAME = "input-portal-no-access-token"; + + @ArquillianResource + @OperateOnDeployment(DEPLOYMENT_NAME) + private URL url; + + @Override + public URL getInjectedUrl() { + return url; + } + + @FindBy(id = "parameter") + private WebElement parameter; + + @FindBy(name = "submit") + private WebElement submit; + + public void execute(String param) { + parameter.clear(); + parameter.sendKeys(param); + submit.click(); + } + +} diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/ProductPortalAutodetectBearerOnly.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/ProductPortalAutodetectBearerOnly.java new file mode 100644 index 0000000000..134c33f4ee --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/ProductPortalAutodetectBearerOnly.java @@ -0,0 +1,43 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.testsuite.adapter.page; + +import org.jboss.arquillian.container.test.api.OperateOnDeployment; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.keycloak.testsuite.page.AbstractPageWithInjectedUrl; + +import java.net.URL; + +/** + * + * @author vramik + */ +public class ProductPortalAutodetectBearerOnly extends AbstractPageWithInjectedUrl { + + public static final String DEPLOYMENT_NAME = "product-portal-autodetect-bearer-only"; + + @ArquillianResource + @OperateOnDeployment(DEPLOYMENT_NAME) + private URL url; + + @Override + public URL getInjectedUrl() { + return url; + } + +} diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java index 6a8930f90e..bc3c8123b3 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java @@ -16,8 +16,24 @@ */ package org.keycloak.testsuite.adapter.servlet; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import org.apache.commons.io.FileUtils; import org.apache.http.client.utils.URLEncodedUtils; +import org.apache.http.conn.params.ConnManagerParams; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.graphene.page.Page; import org.jboss.shrinkwrap.api.spec.WebArchive; @@ -38,6 +54,7 @@ import org.keycloak.models.utils.SessionTimeoutHelper; import org.keycloak.protocol.oidc.OIDCLoginProtocol; import org.keycloak.protocol.oidc.OIDCLoginProtocolService; import org.keycloak.representations.AccessToken; +import org.keycloak.representations.AccessTokenResponse; import org.keycloak.representations.VersionRepresentation; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RealmRepresentation; @@ -45,13 +62,24 @@ import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.testsuite.AssertEvents; import org.keycloak.testsuite.adapter.AbstractServletsAdapterTest; import org.keycloak.testsuite.adapter.filter.AdapterActionsFilter; -import org.keycloak.testsuite.adapter.page.*; +import org.keycloak.testsuite.adapter.page.BasicAuth; +import org.keycloak.testsuite.adapter.page.CustomerDb; +import org.keycloak.testsuite.adapter.page.CustomerDbErrorPage; +import org.keycloak.testsuite.adapter.page.CustomerPortal; +import org.keycloak.testsuite.adapter.page.CustomerPortalNoConf; +import org.keycloak.testsuite.adapter.page.InputPortal; +import org.keycloak.testsuite.adapter.page.InputPortalNoAccessToken; +import org.keycloak.testsuite.adapter.page.ProductPortal; +import org.keycloak.testsuite.adapter.page.ProductPortalAutodetectBearerOnly; +import org.keycloak.testsuite.adapter.page.SecurePortal; +import org.keycloak.testsuite.adapter.page.SecurePortalWithCustomSessionConfig; +import org.keycloak.testsuite.adapter.page.TokenMinTTLPage; import org.keycloak.testsuite.admin.ApiUtil; import org.keycloak.testsuite.auth.page.account.Applications; import org.keycloak.testsuite.auth.page.login.OAuthGrant; import org.keycloak.testsuite.console.page.events.Config; import org.keycloak.testsuite.console.page.events.LoginEvents; -import org.keycloak.testsuite.util.*; +import org.keycloak.testsuite.util.Matchers; import org.keycloak.testsuite.util.URLUtils; import org.keycloak.util.BasicAuthHelper; @@ -62,31 +90,21 @@ import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Form; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.Assert.*; - import javax.ws.rs.core.Response.Status; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.anyOf; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import static org.keycloak.testsuite.auth.page.AuthRealm.DEMO; import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlEquals; -import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith; import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWithLoginUrlOf; -import static org.keycloak.testsuite.util.WaitUtils.*; +import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad; /** * @@ -109,8 +127,12 @@ public abstract class AbstractDemoServletsAdapterTest extends AbstractServletsAd @Page private ProductPortal productPortal; @Page + private ProductPortalAutodetectBearerOnly productPortalAutodetectBearerOnly; + @Page private InputPortal inputPortal; @Page + private InputPortalNoAccessToken inputPortalNoAccessToken; + @Page private TokenMinTTLPage tokenMinTTLPage; @Page private OAuthGrant oAuthGrantPage; @@ -160,11 +182,21 @@ public abstract class AbstractDemoServletsAdapterTest extends AbstractServletsAd protected static WebArchive productPortal() { return servletDeployment(ProductPortal.DEPLOYMENT_NAME, ProductServlet.class); } + + @Deployment(name = ProductPortalAutodetectBearerOnly.DEPLOYMENT_NAME) + protected static WebArchive productPortalAutodetectBearerOnly() { + return servletDeployment(ProductPortalAutodetectBearerOnly.DEPLOYMENT_NAME, ProductServlet.class); + } @Deployment(name = InputPortal.DEPLOYMENT_NAME) protected static WebArchive inputPortal() { return servletDeployment(InputPortal.DEPLOYMENT_NAME, "keycloak.json", InputServlet.class, ServletTestUtils.class); } + + @Deployment(name = InputPortalNoAccessToken.DEPLOYMENT_NAME) + protected static WebArchive inputPortalNoAccessToken() { + return servletDeployment(InputPortalNoAccessToken.DEPLOYMENT_NAME, "keycloak.json", InputServlet.class, ServletTestUtils.class); + } @Deployment(name = TokenMinTTLPage.DEPLOYMENT_NAME) protected static WebArchive tokenMinTTLPage() { @@ -184,7 +216,7 @@ public abstract class AbstractDemoServletsAdapterTest extends AbstractServletsAd applicationsPage.setAuthRealm(DEMO); loginEventsPage.setConsoleRealm(DEMO); } - + @Before public void beforeDemoServletsAdapterTest() { // Delete all cookies from token-min-ttl page to be sure we are logged out @@ -813,5 +845,175 @@ public abstract class AbstractDemoServletsAdapterTest extends AbstractServletsAd String pageSource = driver.getPageSource(); assertTrue(pageSource.contains("Forbidden") || pageSource.contains("HTTP Status 401")); } + + // KEYCLOAK-3509 + @Test + public void testLoginEncodedRedirectUri() { + // test login to customer-portal which does a bearer request to customer-db + driver.navigate().to(productPortal.getInjectedUrl() + "?encodeTest=a%3Cb"); + System.out.println("Current url: " + driver.getCurrentUrl()); + assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); + testRealmLoginPage.form().login("bburke@redhat.com", "password"); + System.out.println("Current url: " + driver.getCurrentUrl()); + + assertCurrentUrlEquals(productPortal + "?encodeTest=a%3Cb"); + String pageSource = driver.getPageSource(); + Assert.assertTrue(pageSource.contains("iPhone")); + Assert.assertTrue(pageSource.contains("uriEncodeTest=true")); + driver.navigate().to(productPortal.getInjectedUrl()); + assertCurrentUrlEquals(productPortal); + System.out.println(driver.getCurrentUrl()); + Assert.assertTrue(driver.getPageSource().contains("uriEncodeTest=false")); + + // test logout + String logoutUri = OIDCLoginProtocolService.logoutUrl(authServerPage.createUriBuilder()) + .queryParam(OAuth2Constants.REDIRECT_URI, customerPortal.toString()) + .build("demo").toString(); + driver.navigate().to(logoutUri); + assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); + productPortal.navigateTo(); + assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); + customerPortal.navigateTo(); + assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); + + } + + @Test + public void testAutodetectBearerOnly() { + Client client = ClientBuilder.newClient(); + + // Do not redirect client to login page if it's an XHR + System.out.println(productPortalAutodetectBearerOnly.getInjectedUrl().toString()); + WebTarget target = client.target(productPortalAutodetectBearerOnly.getInjectedUrl().toString()); + Response response = target.request().header("X-Requested-With", "XMLHttpRequest").get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + // Do not redirect client to login page if it's a partial Faces request + response = target.request().header("Faces-Request", "partial/ajax").get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + // Do not redirect client to login page if it's a SOAP request + response = target.request().header("SOAPAction", "").get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + // Do not redirect client to login page if Accept header is missing + response = target.request().get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + // Do not redirect client to login page if client does not understand HTML reponses + response = target.request().header(HttpHeaders.ACCEPT, "application/json,text/xml").get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + // Redirect client to login page if it's not an XHR + response = target.request().header("X-Requested-With", "Dont-Know").header(HttpHeaders.ACCEPT, "*/*").get(); + Assert.assertEquals(302, response.getStatus()); + Assert.assertTrue(response.getHeaderString(HttpHeaders.LOCATION).contains("response_type=code")); + response.close(); + + // Redirect client to login page if client explicitely understands HTML responses + response = target.request().header(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9").get(); + Assert.assertEquals(302, response.getStatus()); + Assert.assertTrue(response.getHeaderString(HttpHeaders.LOCATION).contains("response_type=code")); + response.close(); + + // Redirect client to login page if client understands all response types + response = target.request().header(HttpHeaders.ACCEPT, "*/*").get(); + Assert.assertEquals(302, response.getStatus()); + Assert.assertTrue(response.getHeaderString(HttpHeaders.LOCATION).contains("response_type=code")); + response.close(); + client.close(); + } + + // KEYCLOAK-3016 + @Test + public void testBasicAuthErrorHandling() { + Client client = ClientBuilder.newClient(); + WebTarget target = client.target(customerDb.getInjectedUrl().toString()); + Response response = target.request().get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + // The number of iterations should be HttpClient's connection pool size + 1. + final int LIMIT = ConnManagerParams.DEFAULT_MAX_TOTAL_CONNECTIONS + 1; + for (int i = 0; i < LIMIT; i++) { + System.out.println("Testing Basic Auth with bad credentials " + i); + response = target.request().header(HttpHeaders.AUTHORIZATION, "Basic dXNlcm5hbWU6cGFzc3dvcmQ=").get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + } + + client.close(); + } + + // KEYCLOAK-1733 + @Test + public void testNullQueryParameterAccessToken() { + Client client = ClientBuilder.newClient(); + + WebTarget target = client.target(customerDb.getInjectedUrl().toString()); + Response response = target.request().get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + target = client.target(customerDb.getInjectedUrl().toString() + "?access_token="); + response = target.request().get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + + client.close(); + } + + // KEYCLOAK-1733 + @Test + public void testRestCallWithAccessTokenAsQueryParameter() { + + Client client = ClientBuilder.newClient(); + try { + WebTarget webTarget = client.target(testRealmPage.toString() + "/protocol/openid-connect/token"); + + Form form = new Form(); + form.param("grant_type", "password"); + form.param("client_id", "customer-portal-public"); + form.param("username", "bburke@redhat.com"); + form.param("password", "password"); + Response response = webTarget.request().post(Entity.form(form)); + + Assert.assertEquals(200, response.getStatus()); + AccessTokenResponse tokenResponse = response.readEntity(AccessTokenResponse.class); + response.close(); + + String accessToken = tokenResponse.getToken(); + + // test without token + response = client.target(customerDb.getInjectedUrl().toString()).request().get(); + Assert.assertEquals(401, response.getStatus()); + response.close(); + // test with access_token as QueryParamter + response = client.target(customerDb.getInjectedUrl().toString()).queryParam("access_token", accessToken).request().get(); + Assert.assertEquals(200, response.getStatus()); + response.close(); + } finally { + client.close(); + } + } + + //KEYCLOAK-4765 + @Test + @Ignore + public void testCallURLWithAccessToken() { + // test login to customer-portal which does a bearer request to customer-db + String applicationURL = inputPortalNoAccessToken.getInjectedUrl().toString() + "?access_token=invalid_token"; + driver.navigate().to(applicationURL); + System.out.println("Current url: " + driver.getCurrentUrl()); + + Assert.assertEquals(applicationURL, driver.getCurrentUrl()); + System.out.println(driver.getPageSource()); + inputPortalNoAccessToken.execute("hello"); + } } diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json index a0468278df..1570278791 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json @@ -181,6 +181,12 @@ "http://localhost" ] }, + { + "clientId": "customer-portal-public", + "enabled": true, + "publicClient": true, + "directAccessGrantsEnabled": true + }, { "clientId": "product-portal", "enabled": true, @@ -201,6 +207,16 @@ ], "secret": "password" }, + { + "clientId": "product-portal-autodetect-bearer-only", + "enabled": true, + "adminUrl": "/product-portal-autodetect-bearer-only", + "baseUrl": "/product-portal-autodetect-bearer-only", + "redirectUris": [ + "/product-portal-autodetect-bearer-only/*" + ], + "secret": "password" + }, { "clientId": "secure-portal", "enabled": true, @@ -247,6 +263,16 @@ ], "secret": "password" }, + { + "clientId": "input-portal-no-access-token", + "enabled": true, + "adminUrl": "/input-portal-no-access-token", + "baseUrl": "/input-portal-no-access-token", + "redirectUris": [ + "/input-portal-no-access-token/*" + ], + "secret": "password" + }, { "clientId": "token-min-ttl", "enabled": true, diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/META-INF/context.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/META-INF/context.xml new file mode 100644 index 0000000000..12ec58cf17 --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/META-INF/context.xml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/jetty-web.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/jetty-web.xml new file mode 100644 index 0000000000..8c59313878 --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/jetty-web.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/keycloak.json b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/keycloak.json new file mode 100644 index 0000000000..92446db12b --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/keycloak.json @@ -0,0 +1,12 @@ +{ + "realm" : "demo", + "resource" : "input-portal-no-access-token", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url" : "http://${my.host.name}:8180/auth", + "ssl-required" : "external", + "min-time-between-jwks-requests": 120, + "credentials" : { + "secret": "password" + }, + "ignore-oauth-query-parameter": true +} \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/web.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/web.xml new file mode 100644 index 0000000000..272a262195 --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/input-portal-no-access-token/WEB-INF/web.xml @@ -0,0 +1,57 @@ + + + + + + input-portal-no-access-token + + + Servlet + org.keycloak.testsuite.adapter.servlet.InputServlet + + + + Servlet + /* + + + + + Users + /secured/* + + + user + + + + + KEYCLOAK + demo + + + + admin + + + user + + diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/META-INF/context.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/META-INF/context.xml new file mode 100644 index 0000000000..5fb1b92098 --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/META-INF/context.xml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/WEB-INF/keycloak.json b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/WEB-INF/keycloak.json new file mode 100644 index 0000000000..3daaed684d --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/WEB-INF/keycloak.json @@ -0,0 +1,11 @@ +{ + "realm" : "demo", + "resource" : "product-portal-autodetect-bearer-only", + "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB", + "auth-server-url" : "http://localhost:8180/auth", + "ssl-required" : "external", + "credentials" : { + "secret": "password" + }, + "autodetect-bearer-only" : true +} \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/WEB-INF/web.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/WEB-INF/web.xml new file mode 100644 index 0000000000..0f41c306f8 --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-autodetect-bearer-only/WEB-INF/web.xml @@ -0,0 +1,57 @@ + + + + + + product-portal-autodetect-bearer-only + + + Servlet + org.keycloak.testsuite.adapter.servlet.ProductServlet + + + + Servlet + /* + + + + + Users + /* + + + user + + + + + KEYCLOAK + demo + + + + admin + + + user + + diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-subsystem/META-INF/context.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-subsystem/META-INF/context.xml index b4ddcce386..5fb1b92098 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-subsystem/META-INF/context.xml +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal-subsystem/META-INF/context.xml @@ -15,6 +15,6 @@ ~ limitations under the License. --> - + \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal/META-INF/context.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal/META-INF/context.xml index b4ddcce386..5fb1b92098 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal/META-INF/context.xml +++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/product-portal/META-INF/context.xml @@ -15,6 +15,6 @@ ~ limitations under the License. --> - + \ No newline at end of file