小编Ale*_*lex的帖子

Keycloak JavaScript API获取当前登录用户

我们计划使用keycloak来保护一堆Web应用程序,其中一些是用Java编写的,有些是用JavaScript(带有React)的。

通过keycloak登录用户之后,每个Web应用程序都需要检索已登录的用户以及该用户具有的领域/客户端角色。

  • 对于Java应用程序,我们尝试了keycloak Java API (request -> KeycloakSecurityContext -> getIdToken -> getPreferredUsername/getOtherClaims)。他们似乎工作正常
  • 对于JavaScript应用程序,我们尝试了以下代码,但无法成功使Keycloak初始化(请注意,在用户已经通过keycloak进行身份验证之后,此代码位于Web应用程序代码中,该应用程序仅尝试检索以哪些角色登录的用户):

    var kc = Keycloak({
        url: 'https://135.112.123.194:8666/auth',
        realm: 'oneRealm',
        clientId: 'main'
    }); 
    
    //this does not work as it can't find the keycloak.json file under WEB-INF
    //var kc = Keycloak('./keycloak.json'); 
    
    kc.init().success(function () {
        console.log("kc.idToken.preferred_username: " + kc.idToken.preferred_username);
        alert(JSON.stringify(kc.tokenParsed)); 
        var authenticatedUser = kc.idTokenParsed.name; 
        console.log(authenticatedUser);  
    }).error(function () {
        window.location.reload();
    });
    
    Run Code Online (Sandbox Code Playgroud)

我认为Web应用程序需要检索当前的用户信息是相当普遍的。谁知道上面的代码为什么不起作用?

谢谢。

javascript authorization keycloak

5
推荐指数
2
解决办法
1万
查看次数

如何禁用CN检查CXF 3.0.0+ jax-rs 2.0客户端

我不知道如何用CXF 3.0.4 JAX-RS 2.0客户端以编程方式禁用CN检查.我的代码如下:

     System.setProperty("jsse.enableSNIExtension", "false"); 
        HttpsURLConnection.setDefaultHostnameVerifier( 
        new HostnameVerifier(){ 

            public boolean verify(String hostname, 
                    SSLSession sslSession) { 

                    return true; 
            
            } 
        }); 
            Client client = ClientBuilderImpl.newClient(); 
            String urlHost = "https://" + centralNode; 
            WebTarget target = client.target(urlHost).path(BASE_SERVICE_URL); 
            String encodedpw = Base64.encodeBase64String(passwd.getBytes()); 
            String body = "{\"uid\" : \"" + uid + "\",\"password\": \"" + encodedpw + "\"}"; 
            Response res = target.request(MediaType.APPLICATION_JSON).post(Entity.entity(body, MediaType.APPLICATION_JSON)); 
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经尝试覆盖默认的hostnameverifier,并将jsse.enableSNIExtension设置为false.这些都不起作用,我仍然得到例外:

"https URL主机名与客户端信任库中服务器证书上的公用名(CN)不匹配.确保服务器证书正确,或禁用此检查(不建议用于生产)设置CXF客户端TLS配置属性"disableCNCheck "为了真实."

请帮忙!

cruisecontrol.net ssl cxf certificate jax-rs

3
推荐指数
1
解决办法
5038
查看次数