避免使用keycloak默认登录页面并使用项目登录页面

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

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

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

扩展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" } 

将为您提供初始访问令牌和刷新令牌

用同一个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检查授权/身份validation的内容。

您可以进行自己的登录并通过REST API将凭据发送到keycloak,一旦获得访问令牌,只需将其放入对keycloak受保护资源的任何正在进行的请求的标头中,

 headers :{ Authorization : 'Bearer ' + access_token_you_got } 

3个步骤:

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

目录结构

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

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

  2. 转到密钥泄露的管理控制台,进入领域设置>主题>登录主题,然后选择myTheme

在此处输入图像描述

  • 您可能应该坚持使用Keycloack的表格。 它们带来了不错的function(SSO,pw重置等),并且可以完全自定义(通过主题)。 但是,可以通过所谓的直接访问授权获得访问令牌 。 它可以通过Keycloak REST API完成 。
  • 存储自定义用户信息(性别,作业等)由用户属性完成

官方Keycloak文档中或多或少都涵盖了这两个主题。

将您的登录主题放在keycloak主题目录中,然后通过管理员登录更改登录主题设置并从下拉列表中选择您的主题。 你的登录主题必须在keycloak默认主题格式中,所以创建你的请参考keycloak默认主题并根据它设计你的。

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

如果您想通过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 urlParameters = new ArrayList(); 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()将使用accessToken和RefreshToken将值设置为200。 否则,response.getStatusLine()。getStatusCode()将值为403,数据为:{“error”:“invalid_grant”,“error_description”:“无效的用户凭据”}