---
# System prepended metadata

title: Cấu hình WSO2 Identity server 5.11 sử dụng MySQL
tags: [WSO2IS]

---

---
title: Cấu hình WSO2 Identity server 5.11 sử dụng MySQL
tags: WSO2IS
description: Cấu hình WSO2 Identity server 5.11 sử dụng CSDL MySQL
---

<style>

html, body, .ui-content {
    background-color: #333;
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2 {
    border-bottom-color: #ffffff69;
}

.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
    color: #fff;
}

.markdown-body img {
    background-color: transparent;
}

.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
    color: white;
    border-left: 2px solid white;
}

.expand-toggle:hover, 
.expand-toggle:focus, 
.back-to-top:hover, 
.back-to-top:focus, 
.go-to-bottom:hover, 
.go-to-bottom:focus {
    color: white;
}


.ui-toc-dropdown {
    background-color: #333;
}

.ui-toc-label.btn {
    background-color: #191919;
    color: white;
}

.ui-toc-dropdown .nav>li>a:focus, 
.ui-toc-dropdown .nav>li>a:hover {
    color: white;
    border-left: 1px solid white;
}

.markdown-body blockquote {
    color: #bcbcbc;
}

.markdown-body table tr {
    background-color: #5f5f5f;
}

.markdown-body table tr:nth-child(2n) {
    background-color: #4f4f4f;
}

.markdown-body code,
.markdown-body tt {
    color: #eee;
    background-color: rgba(230, 230, 230, 0.36);
}

a,
.open-files-container li.selected a {
    color: #5EB7E0;
}

</style>

# Cấu hình WSO2 Identity server 5.11 với MySQL
###### <i class='fa fa-tags'></i>: `Templates` `Book`

<i class="fa fa-book fa-fw"></i> Hướng dẫn này giúp cấu hình **WSO2 Identity server 5.11** với primary userstore sử dụng csdl **MySQL**.

## 1. Chuẩn bị

- Tải bộ cài đặt tại [**đây**](https://drive.google.com/file/d/1d2sjmxwaedV_918P8sebDu5GRqDqf900/view?usp=share_link) và giải nén ra một thư mục bất kỳ
- Tại thư viện làm việc với MySQL tại [**đây**](https://drive.google.com/file/d/1M8puqVCw_xIzetmb4uVKSXYonizy-hQp/view?usp=share_link) và copy vào thư mục **`<IS-HOME>/repository/components/lib`**

## 2. Tạo các cơ sở dữ liệu cần thiết

Chúng ta phải tạo 02 cơ sở dữ liệu cần thiết cho **WSO2 Identity server 5.11** bao gồm: *shared_db*, *identity_db*
- Bước 1: Đăng nhập vào mysql bằng tài khoản quản trị ***root***
  ```
  mysql -u root -h localhost -p
  ```
- Bước 2: Tạo các database cần thiết (*LƯU Ý: Tất các database phải để **CHARACTER SET** là **latin1** và **COLLATE** là **latin1bin**)*
  ```
  mysql> CREATE DATABASE is_identity CHARACTER SET latin1 COLLATE latin1_bin;
  mysql> CREATE DATABASE is_shared CHARACTER SET latin1 COLLATE latin1_bin;
  ```
- Bước 3: Run script để tạo table cho các database
*<i class="fa fa-exclamation-circle"></i> Nếu sử dụng tham số -Dsetup để tự động tạo table, function, storeprocedure thì không cần phải thực hiện bước này* [[**Xem chi tiết tại đây**](#5-Initial-database-của-WSO2-Identity-Server)]

  - **identity_db**: 
  ```<IS-HOME>/dbscripts/identity/mysql.sql```
  ```<IS-HOME>/dbscripts/identity/uma/mysql.sql```
  ```<IS-HOME>/dbscripts/consent/mysql.sql```
  - **shared_db**: 
  ```<IS-HOME>/dbscripts/mysql.sql```
  
## 3. Thay đổi ngày hết hạn của keystore mặc định (wso2carbon.jks)

Keystore mặc định của wso2 thường có thời hạn 2 năm. Vì chúng ta sẽ dùng internal keystore để mã hoá cũng như giải mã các dữ liệu nội bộ của wso2is nên chúng ta sẽ thay đổi ngày hết hạn của keystore tránh việc một thời gian sau chúng ta phải thay đổi lại thông tin của keystore
Các keystore của WSO2 Identity Server nằm trong thư mục **<IS_HOME>/repository/resources/security** (<IS_HOME>: là đường dẫn thư mục gốc chứa bộ chạy của WSO2 Identity Server)
- Bước 1: Thay đổi thời gian hết hạn của keystore **wso2carbon.jks**
  ```
  keytool -selfcert -v -alias wso2carbon -keystore <IS_HOME>/repository/resources/security/wso2carbon.jks -validity 7300
  Enter keystore password: (nhập mật khẩu của keystore là wso2carbon)
  ```
- Bước 2: Export certificate của keystore vừa đổi thời giạn ở bước 1
  ```
  keytool -exportcert -keystore <IS_HOME>/repository/resources/security/wso2carbon.jks -alias wso2carbon -file <IS_HOME>/repository/resources/security/wso2carbon.cer
  ```
- Bước 3: Xoá certificate cũ trong truststore client
  ```
  keytool -delete -alias wso2carbon -keystore <IS_HOME>/repository/resources/security/client-truststore.jks 
  ```
- Bước 4: Import certificate của certificate tạo ở bước 2 vào truststore client của WSO2 Identity Server
  ```
  keytool -importcert -alias wso2carbon -file <IS_HOME>/repository/resources/security/wso2carbon.cer -keystore <IS_HOME>/repository/resources/security/client-truststore.jks 
  ```
- Bước 5: Tạo internal keystore
  ```
  cp <IS_HOME>/repository/resources/security/wso2carbon.jks <IS_HOME>/repository/resources/security/internal-keystore.jks
  ```
  
## 4. Cấu hình WSO2 Identity Server

Chúng ta sẽ cấu hình các thông tin cần thiết cho WSO2 Identity Server (*<IS_HOME>/repository/conf/deployment.toml*)
- Bước 1: Cấu hình userstore mặc định dùng database (Mặc định WSO2 Identity Server lưu thông tin định danh người dùng vào OpenLDAP được tích hợp đi cùng bộ cài đặt, nếu dùng phương thức này sẽ khó quản lý việc backup và restore)
  ```
  [user_store]
  type = "database_unique_id"

  [database.user]
  url = "jdbc:mysql://ip:port/is_shared?useSSL=false"
  username = "root"
  password = "password"
  driver = "com.mysql.cj.jdbc.Driver"

  [realm_manager]
  data_source = "WSO2USER_DB"
  ```
- Bước 2: Cấu hình database identity của WSO2 Identity Server
  ```
  [database.identity_db]
  url = "jdbc:mysql://ip:port/is_identity?useSSL=false"
  username = "root"
  password = "password"
  driver="com.mysql.cj.jdbc.Driver"

  [database.identity_db.pool_options]
  maxActive = "80"
  maxWait = "60000"
  minIdle = "5"
  testOnBorrow = true
  validationQuery="SELECT 1"
  validationInterval="30000"
  defaultAutoCommit=false
  ```
- Bước 3: Cấu hình database shared của WSO2 Identity Server
  ```
  [database.shared_db]
  url = "jdbc:mysql://ip:port/is_shared?useSSL=false"
  username = "root"
  password = "password"
  driver="com.mysql.cj.jdbc.Driver"

  [database.shared_db.pool_options]
  maxActive = "80"
  maxWait = "60000"
  minIdle = "5"
  testOnBorrow = true
  validationQuery="SELECT 1"
  validationInterval="30000"
  defaultAutoCommit=false
  ```
- Bước 4: Cấu hình primary keystore của WSO2 Identity Server
  ```
  [keystore.primary]
  file_name = "wso2carbon.jks"
  type = "JKS"
  password = "wso2carbon"
  alias = "wso2carbon"
  key_password = "wso2carbon"
  ```
- Bước 5: Cấu hình trust store của WSO2 Identity Server
  ```
  [truststore]
  file_name="client-truststore.jks"
  password="wso2carbon"
  type="JKS"
  ```
- Bước 6: Cấu hình internal store của WSO2 Identity Server
  ```
  # The KeyStore which is used for encrypting/decrypting internal data. By default the primary keystore is used as the internal keystore.
  [keystore.internal]
  file_name = "internal-keystore.jks"
  type = "JKS"
  password = "wso2carbon"
  alias = "wso2carbon"
  key_password = "wso2carbon"
  ```
- Bước 7: Cấu hình CORS
  ```
  [cors]
  allow_generic_http_requests = true
  allow_any_origin = true
  #Config if allow_any_origin is false
  #allowed_origins = [
  #  "http://wso2.is","http://localhost","http://localhost:8080"
  #]
  allow_subdomains = true
  supported_methods = [
     "GET",
     "POST",
     "HEAD",
     "OPTIONS",
     "PUT",
     "PATCH",
     "HEAD",
     "DELETE",
     "PATCH"
  ]
  support_any_header = true
  supported_headers = []
  exposed_headers = []
  supports_credentials = true
  max_age = 3600
  tag_requests = false
  ```
- Bước 8: Cấu hình application system (myaccount, console)
  ```
  [system_applications]
  read_only_apps = []
  ```
- Bước 9: Cấu hình TOTP (*optional*)
  ```
  [authentication.authenticator.totp.parameters]
  encodingMethod="Base32"
  timeStepSize="30"
  windowSize="3"
  authenticationMandatory=false
  enrolUserInAuthenticationFlow=false
  usecase="userAttribute"
  userAttribute =  "http://wso2.org/foursquare/claims/email"
  secondaryUserstore="primary, dulieutnmt.vn, niler.com"
  #TOTPAuthenticationEndpointURL="authenticationendpoint/totp.do"
  TOTPAuthenticationEndpointErrorPage="authenticationendpoint/totp_error.do"
  TOTPAuthenticationEndpointEnableTOTPPage="authenticationendpoint/totp_enroll.do"
  Issuer="NILER"
  UseCommonIssuer=true
  ```
  
## 5. Initial database của WSO2 Identity Server

Nếu chúng ta không execute các scripts sql để tạo các bảng, storeprocedure, function thủ công (thực hiện bước 3 ở phần 1) thì chúng ta có một cách để WSO2 Identity Server tự khởi tạo cho chúng ta bằng cách khởi động WSO2 Identity Server lần đầu tiên

- Linux hoặc MacOS:
  ```
  <IS_HOME>/bin/wso2server.sh -Dsetup
  ``` 
- Windows:
  ```
  <IS_HOME>/bin/wso2server.bat -Dsetup
  ```
Sau khi WSO2 Identity Server khởi động xong, nhấn tổ hợp phím Ctr+C để stop WSO2 Identity Server và tiến hành khởi động lại WSO2 Identity Server (**không** thêm tham số ***-Dsetup***)

## 6. Cấu hình admin console xác thực bằng saml (*optional*)

Nếu chúng ta không muốn đăng nhập vào admin console (https://localhost:9443/carbon) bằng phương thức xác thực mặc định của WSO2 Identity Server (giao diện mặc định) thì chúng ta có thể cấu hình cho phép admin console của wos2 identity server xác thực thông qua SSO với SAML

- Bước 1: Khởi động WSO2 Identity Server
  + Linux hoặc MacOS:
    ```
    <IS_HOME>/bin/wso2server.sh
    ``` 
  + Windows:
    ```
    <IS_HOME>/bin/wso2server.bat
    ```
- Bước 2: Đăng nhập vào admin console (ex: https://localhost:9443/carbon với tài khoản mặc định admin/admin)
- Bước 3: Tạo một **Service Providers** với tên là ex: Admin Console IS
- Bước 4: Mở ***Inbound Authentication Configuration > SAML2 Web SSO Configuration*** và click ***Configure***.
- Bước 5: Nhập các thông tin như trong bảng vào mục ***Manual Configuration***

    | Field name | Value |
    | -------- | -------- |
    | Issuer | carbonServer |
    | Assertion Consumer URLs | https://auth.cloudsigning.co:443/acs |
    | Enable Response Signing | Selected |
- Bước 6: Thêm cấu hình sau vào file deployment.toml (***<IS_HOME>/repository/conf/deployment.toml***)
  ```
  [admin_console.authenticator.saml_sso_authenticator]
  enable=true
  priority="1"
  assertion_consumer_service_url = "https://auth.cloudsigning.co:443/acs"
  identity_provider_sso_service_url = "https://auth.cloudsigning.co:443/samlsso"
  ```
  ***NOTE:*** Thay domain theo đúng với tên domain đã tạo và phải có ***port*** tương ứng (kể cả là port 443)
- Bước 7: Khởi động lại WSO2 Identity Server và truy cập lại vào url https://localhost:9443/carbon