2016-09-06 281 views
11

我正在創建angular.js web應用程序並尋找如何將keycloak集成到項目中。我已經閱讀並觀看了許多教程,我發現他們中的大多數都有用戶通過默認登錄頁面keycloak進行日誌記錄/註冊,然後重定向到應用程序。避免keycloak默認登錄頁面並使用項目登錄頁面

我設計了我自己的登錄和註冊頁面,我想使用。我如何使用它們而不是keycloak默認值。有沒有我可以打電話的API或可能是我的後端會這樣做?我也讀過彈簧適配器可用於keycloak,我可以使用它們嗎?任何示例的鏈接都會很好。

我有第二個問題是註冊時可以添加更多的用戶詳細信息,如地址,dob,性別在keycloak?因爲我的註冊頁面需要這些信息。

回答

1
  • 你可能應該堅持Keycloack的形式。他們帶來了不錯的功能(SSO,重置等),並完全可定製(通過主題)。然而,在那裏有可能通過所謂的直接訪問授權獲得訪問令牌。它可以通過Keycloak REST API完成。
  • 存儲自定義用戶信息(性別,職業等)是由用戶進行屬性

這兩個議題都或多或少地覆蓋在官方Keycloak Docs

+0

是否也可以創建/一個來自本地移動應用程序的用戶?我試過這個端點:auth/admin/realms/{realm}/users,但它給我一個401錯誤。我認爲這是在您以管理員身份登錄後創建用戶的終端。 –

+0

用戶自行註冊必須事先在領域設置中啓用。但是,我不確定如何通過Keycloak API執行自行註冊。 – Yuri

+1

謝謝。這是可能的,但我必須延長Keycloak。擴展問題是,在將其部署到Keycloak之前,您無法測試您的代碼。很確定,jboss的聰明人最終會創建某種「SDK」。 –

0

將您的登錄主題放在keycloak主題目錄中,並通過管理員登錄更改登錄主題設置並從下拉菜單中選擇您的主題。 您的登錄主題必須在keycloak默認主題合成中,以便創建您的請參閱keycloak默認主題並據此設計您的。

您可以參考以下 Keycloak theme configuration

16

3個步驟:

  1. keycloak /主題/目錄創建一個名稱,如文件夾。 myTheme

 directory structure

  • MyTheme的夾請將定製登錄頁面

    (結構必須相同鹼基或keycloak主題,我的建議是複製基本主題,重新命名並自定義它)。

  • 轉到keycloak的管理控制檯爲領域設置>主題>登錄主題並選擇MyTheme的

  • enter image description here

    +0

    清晰和簡單的答案 - 謝謝! –

    16

    擴展的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 
    
    } 
    
    0

    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()會給出值:

    ,如果你想通過Java來打keycloak登錄頁面,並獲得響應使用下面的代碼200以及accessToken和RefreshToken。否則,response.getStatusLine()。getStatusCode()將賦予值爲403,數據爲:{「error」:「invalid_grant」,「error_description」:「無效的用戶憑據」}