Chuyển tới nội dung chính

Đăng nhập

Tổng quan các bước cần thực hiện để đăng nhập

  • Tạo code verifier và code challenge
  • Đăng nhập Zalo và lấy được OauthCode. Vì mặc định thì oauthCode chỉ có hiệu lực chỉ trong 10 phút, nên ngay sau khi có được oauthCode thì cần thực hiện lấy AccessToken và RefreshToken ngay.
  • Dùng OauthCode để lấy AccessToken và RefreshToken:
    • AccessToken: dùng để gọi các Official Account API Hiệu lực: mặc định là 1 giờ, server sẽ trả về thời gian expired khi gọi API get AccessToken.
    • RefreshToken: lưu lại RefreshToken ở phía app để kiểm tra đã đăng nhập hay chưa, và sử dụng để tạo lại AccessToken khi AccessToken hết hiệu lực. Hiệu lực: mặc định là 3 tháng

Tạo code verifier và code challenge

Zalo sử dụng code challengecode verifier (theo phương thức PKCE) để tăng độ bảo mật của quá trình xác thực và ủy quyền. Xem thêm về PKCE tại đây. Sau khi cấu hình Đăng nhập, bạn cần:

  • Tạo một code verifier và lưu trữ trên hệ thống của bạn.
  • Dùng mã hóa code verifier bằng bộ ký tự ASCII, tiếp đến dùng giải thuật SHA-256 để tạo mã băm, sau cùng encode Base64 mã băm để tạo ra code challenge từ code verifier.
  • code_challenge = Base64.encode(SHA-256.hash(ASCII(code_verifier)))

Lưu ý:

  • Yêu cầu sử dụng code verifier khác nhau cho từng request.
  • Code verifier là 1 chuỗi bất kỳ, format có đủ chữ hoa, chữ thường, số và dài 43 ký tự.
  • Code verifier là code dùng để xác minh quyền sở hữu của bạn với authorization code bạn nhận được từ hệ thống. Vui lòng không cung cấp code này cho bên thứ ba.

Bước 1: Gọi API authenticate

Có 2 cách gọi:

ZaloSDK.Instance.authenticateZaloWithAuthenType (Activity, LoginVia loginVia, String codeChallenge, OAuthCompleteListener) //default extInfo null

ZaloSDK.Instance.authenticateZaloWithAuthenType (Activity, LoginVia loginVia, String codeChallenge, JSONObject extInfo, OAuthCompleteListener)

Trong đó:

  • LoginVia có 3 tùy chọn đăng nhập:

Enum

Định nghĩa

APP

Đăng nhập bằng Zalo App

WEB

Đăng nhập bằng Webview

APP_OR_WEB

Đăng nhập bằng Zalo App, nếu máy không cài Zalo app sẽ dùng Webview

  • codeChallenge: cách tạo tham khảo tại (đây)
  • extInfo: (optional) thông tin bổ sung app muốn truyền thêm
  • OauthCompleteListener để nhận kết quả đăng nhập:
OAuthCompleteListener listener = new OAuthCompleteListener() {
@Override
public void onAuthenError(ErrorResponse errorResponse) {
//Đăng nhập thất bại..
}

@Override
public void onGetOAuthComplete(OauthResponse response) {
String code = response.getOauthCode()
//Đăng nhập thành công..
}
};

Bước 2: Override onActivityResult của activity login

@Override
protected void onActivityResult(int reqCode, int resCode, Intent d) {
super.onActivityResult(requestCode, resultCode, data);
ZaloSDK.Instance.onActivityResult(this, reqCode, resCode, d);
}