Избегайте страницы входа по умолчанию для ключевого слова и используйте страницу входа в проект

Я работаю над созданием веб-приложения angular.js и ищу, как интегрировать keycloak в проект. Я читал и смотрел много учебников, и я вижу, что у большинства из них есть пользователи, которые регистрируют/регистрируются через страницу входа по умолчанию keycloak, которая затем перенаправляется в приложение.

Я разработал свою собственную страницу регистрации и регистрации, которую я хочу использовать. Как использовать их вместо keycloak по умолчанию. Есть ли какой-либо API, который я могу назвать или может быть моим бэкэнд? Я также читал, что доступны адаптеры spring для keycloak, могу ли я их использовать? Любая ссылка на любой пример будет хорошей.

Второй вопрос, который у меня есть - во время регистрации я могу добавить дополнительные данные пользователя, такие как адрес, dob, пол в keycloak? Потому что моя страница регистрации требует этой информации.

Ответ 1

3 шага:

  • В каталоге keycloak/themes/ создайте папку с именем, например. MyTheme.

структура каталогов

  1. В папке myTheme разместите свою страницу входа в систему

    (структура должна быть такой же, как и темы базы или keyclayak, мой совет - скопировать базовую тему, переименовать ее и настроить ее).

  2. Перейдите в консоль администратора keycloak в Настройки Realm > Темы > Тема входа и выберите myTheme.

введите описание изображения здесь

Ответ 2

Расширение ролей API

POST to your/keycloak/url/auth/realms/master/protocol/openid-connect/token

с данными:

{

    client_id : 'Id_of_your_client',

    username : 'your_username',
    password : '@#$%^&',
    grant_type : "password"

}

предоставит вам токен первичного доступа и токен обновления

и

POST с тем же URL с

Данные:

{

    client_id : 'Id_of_your_client',

   // client_secret : 'optional depending on the type of client',

    grant_type : "refresh_token" ,

    refresh_token : refresh_token_you_got_earlier 

}

предоставит новые токены обновления и доступа. Эти маркеры - это то, что keycloak проверяет авторизацию/аутентификацию.

Вы можете сделать свой собственный вход и отправить учетные данные на клавиатурный ключ через REST API и после того, как у вас есть токен доступа, просто поместите его в заголовок любого текущего запроса на ресурс, защищенный keycloak, как

headers :{

  Authorization : 'Bearer ' +  access_token_you_got

}

Ответ 3

  • Вам, вероятно, следует придерживаться форм Keycloack. Они приносят приятные функции (SSO, pw reset и т.д.) И полностью настраиваются (через темы). Однако там можно получить токен доступа через так называемый грант прямого доступа. Это можно сделать с помощью Keyclayak REST API.
  • Сохранение пользовательской информации (пол, работа и т.д.) выполняется с помощью атрибутов пользователя

Обе темы более или менее описаны в официальном Keycloak Docs.

Ответ 4

Поместите свою тему входа в каталог тем для keycloak и администратором, изменив настройки темы входа в систему и выберите тему из раскрывающегося списка. Ваша тема входа должна быть в форме темы по умолчанию для keycloak, поэтому, чтобы создать ее, пожалуйста, обратитесь к теме по умолчанию для keycloak и спроектируйте ее в соответствии с этим.

Вы можете указать следующее Настройка темы Keycloak

Ответ 5

Используйте приведенный ниже код, если вы хотите попасть на страницу входа в keycloak через java и получить ответ:

String uri = "http://localhost:7080/auth/realms/{RealmName}/protocol/openid-connect/token";

            HttpClient client = HttpClientBuilder.create().build();
            HttpPost post = new HttpPost(uri);
            post.setHeader("User-Agent",
                    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
            List<BasicNameValuePair> urlParameters = new ArrayList<BasicNameValuePair>();
            urlParameters.add(new BasicNameValuePair("grant_type", "password"));
            urlParameters.add(new BasicNameValuePair("client_id", {ClientName}));
            urlParameters.add(new BasicNameValuePair("username", {UserName}));
            urlParameters.add(new BasicNameValuePair("password", {Password}));
            post.setEntity(new UrlEncodedFormEntity(urlParameters));
            HttpResponse response = client.execute(post);
            System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer result = new StringBuffer();
            String line1 = "";
            while ((line1 = rd.readLine()) != null) {
                result.append(line1);
            }
            System.out.println(result);

Если ваше имя пользователя и пароль действительны, response.getStatusLine(). getStatusCode() даст значение 200 вместе с accessToken и RefreshToken. В противном случае response.getStatusLine(). GetStatusCode() предоставит значение как 403 и данные как: { "error": "invalid_grant", "error_description": "Недопустимые учетные данные пользователя" }