Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

logout doesn't work #1

Open
qd19zzx opened this issue Nov 30, 2021 · 1 comment
Open

logout doesn't work #1

qd19zzx opened this issue Nov 30, 2021 · 1 comment

Comments

@qd19zzx
Copy link

qd19zzx commented Nov 30, 2021

Hi, I'm using nexus3-keycloak-plugin and docker-nginx-gateway to implement SSO of nexus3.
Everything goes well, but when I click the "Sigh Out" button in the nexus3 ui, it doesn't work. I got a 500 error in the browser. And the session in keycloak wasn't deleted.

Below is my nginx conf file under vhost.d
Do I miss something? Is there any other configs in nginx or keycloak?
Hope to get your reply,thanks

server {
    listen 80;
    server_name 1.1.1.1;
    resolver 2.2.2.2;

    include /etc/nginx/vhost.d/nexus3.example.com/*.conf;

    set $oidc_logout_path "/logout";
    set $oidc_redirect_after_logout_uri "/";

    location / {
        # Note: $http_host contains ip and port, but $host just contains ip only
        proxy_set_header Host $http_host;
        proxy_set_header X-Keycloak-Sec-Auth $http_x_remote_user:$http_x_remote_user_access_token;
        # proxy_set_header Authorization $http_authorization;
        # Note: make the HTTP header to be smaller
        proxy_hide_header X-Remote-User-Access-Token;

        set $oidc_disabled "false";
        # Disable OIDC when using maven client
        if ($http_user_agent ~* "^(Apache-Maven|docker)/.+$") {
            set $oidc_disabled "true";
        }
        # And disable OIDC when the header Authorization was specified
        if ($http_authorization !~* "^$") {
            set $oidc_disabled "true";
        }

        set $oidc_realm "xxxx";
        # Note: change the client id and secret to the actual value
        set $oidc_client_id "xxxxx";
        set $oidc_client_secret "xxxxxxx";
        set $oidc_discovery "https://xxx.xx/auth/realms/$oidc_realm/.well-known/openid-configuration";
        access_by_lua_file /etc/nginx/vhost.d/oidc.lua;

        client_max_body_size 500M;
        # Disable cache of assets
        proxy_cache            off;
        proxy_read_timeout     600;
        proxy_connect_timeout  600;

        # Avoid to get address resolve error when starting
        set $target http://nexus.nexus.svc.cluster.local:8081;
        proxy_pass  $target;

        sub_filter '</body>' '<script type="text/javascript">(function inject_logout() { var oidc_disabled = "$oidc_disabled"; if (oidc_disabled === "true") { return; } var dom = document.querySelectorAll("a[id^=\'nx-header-signout-\']")[0]; if (!dom) { setTimeout(inject_logout, 500); } else { dom.addEventListener("click", function (event) { event.stopPropagation(); window.location.href = "$oidc_logout_path"; }, true); }})();</script></body>';
        sub_filter_once on;

        # Just for debugging, you may not want it
        # header_filter_by_lua_block {
        #     for key, value in pairs(ngx.resp.get_headers()) do
        #         local val = type(value) == 'string' and {value} or value
        #         for k, v in ipairs(val) do
        #             for i=0, v:len(), 1024 do
        #                 ngx.log(ngx.DEBUG, 'Response Header: '..key..' -> '..v:sub(i + 1, i + 1024))
        #             end
        #         end
        #     end
        #     for key, value in pairs(ngx.req.get_headers()) do
        #         local val = type(value) == 'string' and {value} or value
        #         for k, v in ipairs(val) do
        #             for i=0, v:len(), 1024 do
        #                 ngx.log(ngx.DEBUG, 'Request Header: '..key..' -> '..v:sub(i + 1, i + 1024))
        #             end
        #         end
        #     end
        # }
    }

    # Override the logout action of Nexus
    location /service/rapture/session {
        if ($request_method ~* "^DELETE$") {
            # Redirect to the internal logout url
            return 302 $scheme://$http_host$oidc_logout_path;
        }
        # Login forbidden
        return 403;
    }
}
@qd19zzx qd19zzx changed the title logout was not logout doesn't work Nov 30, 2021
@flytreeleft
Copy link
Owner

@qd19zzx Sorry for sooo late to reply you.

The nginx configuration is just fine. But you should get the detail error messages from the 500 response text and the backend logs which was created by the Keycloak and Nexus. Maybe something is wrong in the backend services.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants