[keycloak-user] CORS problems

sesnor.silva at sapo.pt sesnor.silva at sapo.pt
Wed May 24 10:44:48 EDT 2017


Hello again,

I forgot to mention I'm using Keycloak 3.1.0 Final.
Meanwhile i searched a bit more and found more people with the same  
problem, but sadly, no solution:
http://lists.jboss.org/pipermail/keycloak-user/2014-May/000259.html
http://lists.jboss.org/pipermail/keycloak-user/2016-May/006147.html

I also made a really basic WAR application, protected by keycloak,  
that just says "Hello" when you access the route /hello. The minimal  
client code that reproduces the problem:
<script type="text/javascript"  
src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script type="text/javascript"  
src="http://localhost:9000/auth/js/keycloak.js"></script>
<script type="text/javascript">
    var keycloak = Keycloak('keycloak.json');
        keycloak.init({ onLoad: 'login-required'  
}).success(function(authenticated) {
            if (authenticated) {
                $.ajax({method: "GET",   url: "http://localhost:8080/hello",
                    headers: {  'Authorization': 'Bearer ' + keycloak.token }
                });
             }
        });
</script>

I'm able to login successfully and acquire a valid working token.  
However the AJAX call fails with the same errors mentioned before.

In Chrome 57 and Opera : "The 'Access-Control-Allow-Origin' header  
contains multiple values 'http://localhost, http://localhost', but  
only one is allowed. Origin 'http://localhost' is therefore not  
allowed access."

In Firefox 52: "Cross-Origin Request Blocked: The Same Origin Policy  
disallows reading the remote resource. (Reason: CORS header  
‘Access-Control-Allow-Origin’ does not match ‘(null)’)".

It works in IE11 but the page refreshes constantly, similar to what  
I've mentioned  
here: http://lists.jboss.org/pipermail/keycloak-user/2017-May/010677.html,  
even when accepting third-party cookies.

Anyone have any hints please? What's going on with my setup? :(

Some additional information:

My API has the CORS filter enabled, like this:
<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        
 <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposed.headers</param-name>
        
 <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param>
    <init-param>
        <param-name>cors.support.credentials</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>cors.preflight.maxage</param-name>
        <param-value>10</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

My Client has "enable-cors": true.

Strangely I'm able to access the API through cURL if I use the valid  
access-token.

Any help is appreciated at this point :(.

Best regards,
Silva
 

Citando sesnor.silva at sapo.pt:

> Hello,
>
> I have protected a Java web application that's compiled in a WAR
> package and accessible through a Tomcat 8 sever. To do this I followed
> the steps here:
> https://keycloak.gitbooks.io/documentation/securing_apps/topics/oidc/java/tomcat-adapter.html
>
> My Java Application is a RESTful API which can only be accessed by
> authorized users that bear a token.
>
> In Keycloak I configured my client (and keycloak.json) as follows:
> {
>   "realm": "MainDomain",
>   "bearer-only": true,
>   "auth-server-url": "http://<My Keycloak Server>:8081/auth",
>   "ssl-required": "none",
>   "resource": "main-domain-server"
> }
>
> If I have a valid token I can access the service fine through cURL
> requests. However, using any browser (Firefox, Chrome, Opera, expect
> IE, which for some reason works) I can't access any resource through
> AJAX as I get CORS problems:
> "Response to preflight request doesn't pass access control check: No
> 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'http://localhost:3000' is therefore not allowed
> access. The response had HTTP status code 401."
>
> I searched around and found I should put "enable_cors": true in my
> keycloak.json, however this causes the following CORS problem:
> "The 'Access-Control-Allow-Origin' header contains multiple values
> 'http://localhost:3000, http://localhost:3000', but only one is
> allowed. Origin 'http://localhost:3000' is therefore not allowed
> access."
>
> I think I'm out of ideas at the moment on what could be causing this.
> Does anyone have any idea what could be wrong in my configuration?
>
> My best regards,
> Silva
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/keycloak-user

 


More information about the keycloak-user mailing list