61

我正在创建一个 angular.js Web 应用程序并寻找如何集成keycloak到项目中。我已经阅读并观看了许多教程,我发现其中大多数都有用户通过默认登录页面登录/注册keycloak,然后重定向到应用程序。

我设计了自己想要使用的登录和注册页面。我如何使用它们而不是keycloak默认值。有没有我可以调用的 API 或者我的后端会这样做?我还读到有可用于 keycloak 的弹簧适配器,我可以使用它们吗?任何示例的任何链接都会很好。

我的第二个问题是在注册时我可以添加更多用户详细信息,如地址、出生日期、性别keycloak吗?因为我的注册页面需要这些信息。

4

6 回答 6

75

扩展 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,一旦您拥有访问令牌,只需将其放在对 keycloak 受保护资源的任何正在进行的请求的标头中

headers :{

  Authorization : 'Bearer ' +  access_token_you_got

}
于 2016-12-22T20:32:20.410 回答
41

3个步骤:

  1. keycloak/themes/ 目录中创建名称为例如的文件夹。我的主题

目录结构

  1. myTheme文件夹中放置您的自定义登录页面

    (结构必须与 base 或 keycloak 主题相同,我的建议是复制基本主题,重命名并自定义它)。

  2. 转到 keycloak 的管理控制台进入Realm Settings > Themes > Login Theme并选择myTheme

在此处输入图像描述

于 2016-10-10T13:03:53.810 回答
3

如果您想通过 Java 访问 Keycloak 登录页面并获得响应,请使用以下代码:

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()则将值作为 HTTP 200 以及AccessTokenRefreshToken。否则response.getStatusLine().getStatusCode()将给出 HTTP 403 的值和数据:{"error":"invalid_grant","error_description":"Invalid user credentials"}

于 2017-11-03T11:26:09.333 回答
3
  • 您可能应该坚持使用 Keycloack 的表格。它们带来了不错的功能(SSO、pw 重置等)并且是完全可定制的(通过主题)。但是,可以通过所谓的Direct Access Grant获得访问令牌。它可以通过Keycloak REST API来完成。
  • 存储自定义用户信息(性别、工作等)由用户属性完成

官方Keycloak Docs或多或少地涵盖了这两个主题。

于 2016-09-14T18:08:58.960 回答
1

将您的登录主题放在 keycloak 主题目录中,并通过管理员登录更改登录主题设置并从下拉列表中选择您的主题。您的登录主题必须采用 keycloak 默认主题格式,因此要创建您的主题,请参考 keycloak 默认主题并根据该主题设计您的主题。

您可以参考以下 Keycloak 主题配置

于 2016-10-06T06:56:29.510 回答
0

从文档中,您似乎扩展了主题或覆盖了单个资源(模板、样式表等): https ://www.keycloak.org/docs/latest/server_development/#creating-a-theme

关于其他用户详细信息,再次来自文档: https ://www.keycloak.org/docs/latest/server_development/#_custom_user_attributes

于 2020-12-05T16:13:02.567 回答