Omni OAuth2

Các mục liên quan

Bước 1: Tạo App

- Vào link https://developers.haravan.com/apps
(nếu chưa đăng nhập trước đó thì hệ thống sẽ chuyển sang page login https://accounts.haravan.com, tại page này bạn có thể đang nhập hoặc click tạo mới tài khoản.)

Tạo app

- Sau khi đăng nhập/đăng ký thành công hệ thống sẽ hiển thị ra màn hình listing các ứng dụng đã tạo, Click “Create App” để tạo ứng dụng mới.

Tạo App

- Giao diện tạo mới ứng dụng.

Tạo app

  • Name: Tên ứng dụng.
  • Description: Mô tả ứng dụng.
  • Redirect Url: Đường dẫn ứng dụng của bạn, khi click vào ứng dụng hệ thống sẽ gọi tới.

- Tạo ứng dụng thành công.

     Các field cần lưu lại vào config để sử dụng: App Id, App Secret, Redirect Url

Tạo app

Bước 2: Lấy authorization code

- Diễn giải:

  • Khi click vào app, hệ thống sẽ redirect tới một link mới để lấy code
  • Khi có code, hệ thống sẽ redirect tới một link tiếp theo để lấy access_token

2.1 Request get code

Method

URL  

GET

https://accounts.haravan.com/connect/authorize

Request params:
  response_mode:form_post
  response_type:code id_token
  scope: openid profile email org userinfo web.write_script_tags grant_service
  client_id: bdc63234a49e34309e5abde5b031be33
  redirect_uri: https://localhost:3000/app/authenticate
  nonce:kcjqhdltd 
Example:
 https://accounts.haravan.com/connect/authorize?response_mode=form_post&response_type=code%20id_token&scope=openid%20profile%20email%20org%20userinfo%20web.write_script_tags%20grant_service&client_id=bdc63234a49e34309e5abde5b031be33&redirect_uri= http%3A%2F%2Flocalhost%3A3000%2Fapp%2Fauthenticate &nonce=kcjqhdltd


STT

Thuộc tính

Mô tả

1

response_mode

Form method responses

2

response_type

Chọn các field cần responses

3

scope

Quyền truy cập của token
Lưu ý: các scope này phải giống với scope đã chọn trong phần cấu hình. (Xem các scope hiện có)

4

client_id

App ID trong ứng dụng sau 1khi cài sẽ có

5

redirect_uri

Link nhập ở Redirect Url ở bước 1: tạo app

6

nonce

Mã ramdom

2.2 Response get code

STT

Status

200

{
"code": "c309cc6a97e7da821975d2440645892a95f13ce8e06af81ecffe5ed9db8fe7a3",
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImUyZTFkZDM4ODJkNTE4YTk2OGQ5MWVlYTU3NmQxNzdhIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NzA3Njk4MjAsImV4cCI6MTU3MDc3MDEyMCwiaXNzIjoiaHR0cHM6Ly9hY2NvdW50cy5oYXJhLnZuIiwiYXVkIjoiOGJkOWExNDc1NTI4NTJlNTFlYTU3MTExMDQ3NGZlNjMiLCJub25jZSI6ImtjanFoZGx0ZCIsImlhdCI6MTU3MDc2OTgyMCwiY19oYXNoIjoiRm9XSFRLUU50SWFRVndFSlg5bVBMQSIsInNpZCI6Ijc5NDgyZGExZGE5ZmZlZjJmMjY2NjVjOWE2Yjc4MmIzIiwic3ViIjoiMjAwMDAwMDIwMzMyIiwiYXV0aF90aW1lIjoxNTcwNjgwMDU2LCJpZHAiOiJsb2NhbCIsInJvbGUiOiJhZG1pbiIsIm9yZ2lkIjoiMTAwMDExMzc2MyIsIm1pZGRsZV9uYW1lIjoidGVzdCIsIm5hbWUiOiJ0ZXN0IiwiZW1haWwiOiI4YmQ5YTE0NzU1Mjg1MmU1MWVhNTcxMTEwNDc0ZmU2MyIsIm9yZ25hbWUiOiJob2FpbmFtMDlfMTExIiwib3JnY2F0IjoiT3RoZXIiLCJhbXIiOlsicHdkIl19.Q8I9ezKY6r22exDkqBjXbHHirFFg7HRc33DFRHP0ID6E1XyPsry2zgsyVpP4EVtOs0jl0fEzaLvpKLabFDlqNAwMnnRbPqECazMJ5OTDKGTJsEO9Xj-v-TwqMDWPEwV_Abemj8_deovPCw_3wAxxB3mta1GLqz12iBD7m9jlIWFEzqEvIULhdrQ_isMQwjBaxA2r8oQHqQlxVuUAOPKOgP-mCCUa8kGGAFPtd3dfl4C7EezgNE2xtdjv1ItE4_SCdvaF6-hTMrE5smildtgRp3gGv2_QmgGnU1IV8rPGcT3OyaOtywaaQDBSyGcCkF6OXT30-Ez1guJvllVYJ9AIqg",
"scope":"openid profile email org userinfo grant_service web.write_script_tags",
"session_state": "cE63E1b725ke5g329GmRQLnEydXpuQanSCG_DF8AbKM.15223afbde03d10d258e85b1be797e41"
}

401

Unauthorized

422

{"error": "Unprocessable Entity"}

500

Something went wrong. Please try again later.


- Sau khi redirect tới link trên nếu brower chưa đăng nhập tài khoản hara_account thì hệ thống sẽ yêu cầu đăng nhập để lấy thông tin user, nếu đã đăng nhập trước đó rồi thì hệ thống sẽ bỏ qua bước đăng nhập và lấy thông tin user đã đăng nhập trước đó.

- Có được thông tin user hệ thống sẽ redirect lại link redirect_uri với method là POST mà bạn đã khai báo trước đó và có được code.

Bước 3: Lấy Access_token

- Trên môi trường nodejs sử dụng thư viện: https://www.npmjs.com/package/oauth để lấy access_token.

3.1 Code mẫu  để lấy access_token

- Trên môi trường nodejs

var OAuth2 = require('oauth').OAuth2;

let grant_type = 'authorization_code';
let hr_callback_url = 'http://localhost:3000/baseapp/embed/authenticate';
let client_id = '9f83ffc930129e2f4d11af0fc60bd251';
let client_secret = '618e198b891317f02c545e9fe078f8a72e8f57424ee471ac409a8c0d05bfe8f4';
let url_authorize = 'https://accounts.haravan.com/connect/authorize';
let url_connect_token = 'https://accounts.haravan.com/connect/token';
let code = '6a83f22d3363d270b7c18042e6c2db6571df0b8236b708f5d08778d303a85884';

let params = {};
params.grant_type = grant_type;
params.redirect_uri = hr_callback_url;

let _oauth2 = new OAuth2(
  client_id,
  client_secret,
  '',
  url_authorize,
  url_connect_token,
  ''
);

_oauth2.getOAuthAccessToken(code, params, (err, accessToken, refreshToken, params) => {
    if (err) {
      let parseErrData = JSON.parse(err.data);
      console.log('error', parseErrData);
    } else {
      console.log('accessToken', accessToken);
    }
  });

STT

Thuộc tính

Mô tả

1

OAuth2

Khai báo thư viện OAuth của nodejs

2

grant_type

Loại code cấp.

Luôn là “authorization_code”

3

hr_callback_url

Link nhập ở Redirect Url lúc đầu cài app mới

4

client_id

App ID trong ứng dụng sau khi cài sẽ có

5

client_secret

App Secret trong ứng dụng sau khi cài sẽ có

6

url_authorize

Url haravan cung cấp, hiện tại là:

https://accounts.haravan.com/connect/authorize

7

url_connect_token

Url haravan cung cấp, hiện tại là:

https://accounts.haravan.com/connect/token

8

code

Code được response về ở bước trên.

3.2 Response get Access_token

Status

Response

200

params: {

"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImUyZTFkZDM4ODJkNTE4YTk2OGQ5MWVlYTU3NmQxNzdhIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NTk4MDUyNTUsImV4cCI6MTU1OTgwNTU1NSwiaXNzIjoiaHR0cHM6Ly9hY2NvdW50cy5oYXJhLnZuIiwiYXVkIjoiOWY4M2ZmYzkzMDEyOWUyZjRkMTFhZjBmYzYwYmQyNTEiLCJub25jZSI6ImtjanFoZGx0ZCIsImlhdCI6MTU1OTgwNTI1NSwiYXRfaGFzaCI6InlVcHBoaE15bnZUSUpWV0tzSkMtS3ciLCJzaWQiOiJhMzhkN2M5YWM0ODZiZjBhOTM2OWI4ZjRiZjk2NDcxZCIsInN1YiI6IjEwMDAxMTQ5OTAiLCJhdXRoX3RpbWUiOjE1NTk4MDUwODAsImlkcCI6ImxvY2FsIiwicm9sZSI6WyJjb21fYXBpLmFkbWluIiwiYWRtaW4iXSwib3JnaWQiOiIxMDAwMTEzNzYzIiwibWlkZGxlX25hbWUiOiJCw7lpIMSQaW5oIEhvw6BpIE5hbSIsIm5hbWUiOiJCw7lpIMSQaW5oIEhvw6BpIE5hbSIsImVtYWlsIjoiYnVpZGluaGhvYWluYW1AZ21haWwuY29tIiwib3JnbmFtZSI6ImhvYWluYW0wOSIsIm9yZ2NhdCI6Ik90aGVyIiwiYW1yIjpbInB3ZCJdfQ.P7xXf0ftuiADd5I8v7uQfJk6Xm839z4RFt_Q9RfpMg_MsqIFgnmpJ4lgB2Zcsjw_SwSasEpszXQ2Dwy8-kt0C5YYvAjKPdTk8DNNZidav9FqtM-53rR-DMbyyoDes8-pWed2J_cTFHEhlayf1jYowAsUo6n3snJAwlHdpnRaHVGyFOi56N6Y8eSA84GNrKRPlBpjfhKY8Pk0pmY_0XOfO7aInPt0RPK42sf0gRVWJR2hSksJaOBL5P6pSDq5A_uT2o-YsE8nZ0OASKzE4aQ0Qeqo-Rx9LaJIzwuJKnyVmFSgl2gJHJUVgTZ0slD5fMmtRuZOSFlDibp8J6wtTnb_MQ",

"access_token": "86f6ab839b301903cc6223dbe236aaa874fa5aa882b8d3d121ba91f8ce660f35",

"expires_in": 86400,

"token_type": "Bearer"

}

401

Unauthorized

422

{"error": "Unprocessable Entity"}

500

Something went wrong. Please try again later.

3.3 Sử dụng access_token

-  Sau khi lấy được access_token, có thể dùng token đó query dữ liệu từ api

- Ví dụ dưới đây sẽ dùng access_token để lấy thông shop bằng postman.

 
    Headers : 
    Content-Type : application/json
    Authorization : Bearer + access_token

Sử dụng access_token

Bước 4: Scopes

Scope là quyền chỉnh sửa hoặc đọc dữ liệu được chia theo từng phần của shop và website, bạn có thể yêu cầu các socpe dưới đây.

4.1 Login scope

STT

Scope

1

openid

2

profile

3

email

4

org

5

userinfo

4.2 Haraweb scopes :

- Scope dành cho các api dùng ngoài website bán hàng.

Haraweb scopes

4.3 Commerce scopes

- Scope dành cho các api dùng trong trang quản trị bán hàng.

Commerce scopes