Невозможно пропустить страницу входа keycloak программно с помощью springboot - PullRequest
0 голосов
/ 15 октября 2019

Мне не удается избежать страницы входа в Keycloak / Невозможно программно аутентифицировать Keycloak

Я попытался получить токен доступа и обновить токен, а затем передать токен доступа, чтобы получить основные данные, как показано ниже, но не смогпройти мимо страницы входа в систему keycloak /

код Springboot

@GetMapping("/authenticatekeyclok")
 public HttpEntity keyclock() 
{
    String res=""; HttpEntity<String> response=null;
    System.out.println("enter into keycloak====");
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    headers.set("Accept", "application/json");
    String url = "http://10.209.22.23:8080/auth/realms/master/protocol/openid-connect/token";
    String dataJSON = "grant_type=password&username=admin&password=admin&client_id=security-admin-console&client_secret=135c0e89-c5f5-4499-a64e-c5219f59f31d";
    HttpEntity formEntity = new HttpEntity<>(dataJSON, headers);
    System.out.println("print headers===="+formEntity.getBody());
    //Trying to get tokens
    response = restTemplate.exchange("http://10.209.22.23:8080/auth/realms/master/protocol/openid-connect/token", HttpMethod.POST, formEntity, String.class);
    System.out.println("response generated============= ");
    System.out.println("O/P : for first api"+response.getBody());
    StringTokenizer st= new StringTokenizer(response.getBody(),",");
    StringTokenizer st1;
    String s="";
    String refreshtoken=null;
    while(st.hasMoreTokens()) {
        s=st.nextToken();
        if(s.contains("refresh_token")) {
            st1=new StringTokenizer(s,":");
            while(st1.hasMoreTokens()) {
                refreshtoken=st1.nextToken();
                refreshtoken= refreshtoken.substring(1,refreshtoken.length()-1);
                System.out.println(refreshtoken);
            }
        } 
    }

    dataJSON = "grant_type=refresh_token&client_id=security-admin-console&client_secret=135c0e89-c5f5-4499-a64e-c5219f59f31d&redirect_uri=http://10.209.22.23:5555/auth/admin/master/console/#/realms/master&refresh_token="+refreshtoken;
    HttpEntity entity1 = new HttpEntity<>(dataJSON, headers);
    response = restTemplate.exchange(url, HttpMethod.POST, entity1, String.class);
    System.out.println("O/P for 2nd ====================== : "+response.getBody());
    st= new StringTokenizer(response.getBody(),",");
    s="";
    String accesstoken=null;
    while(st.hasMoreTokens()) {
        s=st.nextToken();
        if(s.contains("access_token")) {
            st1=new StringTokenizer(s,":");
                  while(st1.hasMoreTokens()) {
                      accesstoken=st1.nextToken();
                      accesstoken= accesstoken.substring(1,accesstoken.length()-1);
                      System.out.println(accesstoken);
                  }
        } 
    }
    dataJSON=""; //ResponseEntity<String> respo = null;
    HttpHeaders headers1 = new HttpHeaders();
    headers1.setContentType(MediaType.APPLICATION_JSON);
    headers1.set("Authorization", "Bearer "+accesstoken);
    HttpEntity entity = new HttpEntity<String>(headers1);
    //Pass the access token and trying to go to admin console of keycloak
    response = restTemplate.exchange("http://10.209.22.23:8080/auth/admin/master/console", HttpMethod.GET, entity, String.class);
    System.out.println("O/P for third======================: "+response.getBody());
    return response;
}

1 Ответ

0 голосов
/ 23 октября 2019

Вы пытаетесь backchannel запросов. Это, безусловно, достижимо без какой-либо видимости в браузере или интерфейсе.

Вы найдете образец кода полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...