ECN Java SDK
Tích hợp server side
ECN Java SDK cung cấp các hàm gọi qua hệ thống GG ID tương ứng với các Tài liệu API social được đóng gói lại thành các interface để thuận tiện cho việc tích hợp hơn khi client sử dụng ngôn ngữ Java
, cung cấp các tính năng sau:
- Hỗ trợ một số hàm để thực quá trình OAuthentication trên hệ thống GG ID
- Hỗ trợ hàm lấy thông tin
token
sau khi người dùng thực hiện quá trình đăng nhập từ hệ thống GG ID - Hỗ trợ ứng dụng lấy thông tin tài khoản của người dùng
- Hỗ trợ đăng xuất khỏi hệ thống GG ID
Xem thêm về mã nguồn
1. Sơ đồ hoạt động
Đây là sequence diagram mô tả cách lấy thông tin về token và thông tin của user từ hệ thống người dùng đến hệ thống GG.
2. Cấu hình và dependency
Thêm các thông tin sau vào file pom.xml
- repository
<repository>
<id>nexus</id>
<name>nexus</name>
<url>https://nexus-repo.vnggames.app/repository/maven-public/</url>
</repository> - dependency
<dependency>
<groupId>vn.vng.ge.ecn</groupId>
<artifactId>ecn-java-sdk</artifactId>
<version>0.0.10</version>
</dependency>
Thêm cấu hình sau vào file config
ecn-java-sdk:
clientId: 984745454866530308
clientSecret: hhNUpUbXMzQmhBNzRxZ2NDMkg
profile: test
clientId
vàclientSecret
: Thông tin được cấp khi đăng ký với hệ thống GG IDprofile
: Tương ứng với các môi trường mà phía client đang tích hợp với bên GG, hiện tại gg cung cấp 3 môi trường tương ứng với cấu hình như sau:test
: Tương tác với các hệ thống GG ID trên môi trường teststg
: Tương tác với các hệ thống GG ID trên môi trường stagingprod
: Tương tác với các hệ thống GG ID trên môi trường production
Cài đặt bean EcnJavaSdkInitializer
@Configuration
@Import({EcnJavaSdkInitializer.class})
public class AppConfiguration {
}
Các hàm được hỗ trợ nằm trong EcnSdkClient
public interface EcnSdkClient {
String generateCodeVerifier();
String generateCodeChallenge(String codeVerifier);
String createRedirectUrl(String redirectUri, String state, String codeChallenge, List<String> scopes,
Map<String, String> extraParams);
ExchangeTokenResponse exchangeToken(String redirectUri, String code, String codeVerifier);
RevokeAccessTokenResponse revokeToken(String accessToken);
GetUserInfoResponse getUserInfo(GetUserInfoRequest request);
}
3. Tạo redirectUrl
Tạo redirectUrl
để hướng người dùng vào trang đăng nhập trên hệ thống của GG ID
public interface EcnSdkClient {
String createRedirectUrl(String redirectUri, String state, String codeChallenge, List<String> scopes,
Map<String, String> extraParams);
}
Dùng để tạo ra đường dẫn để chuyển hướng đến cổng xác thực của hệ thống GG ID
Thông tin dữ liệu đầu vào
redirectUri
: Thông tin đường dẫn sẽ được chuyển hướng đến sau khi người dùng hoàn tất quá trình đăng nhập. URL đã đăng ký với hệ thống GG IDstate
: Nằm trong params trả về củaredirectUri
sau khi người dùng hoàn tất quá trình đăng nhập.- Định dạng
redirectUri
về ở bước 7, ví dụ:redirectUri?state=$state&code=$code
- Không vượt quá 255 kí tự.
- Dùng để kiểm tra xem có thực sự là bên GG ID trả về hay không để đảm bảo về an toàn dữ liệu.
- Dựa vào biến
state
để lấy các thông tin được tạo ra trước đó nhưcodeVerifier
,codeChallenge
,... (hệ thống phải lưu lại các thông tin này ở bước 4).
- Định dạng
codeChallenge
: Dùng để kiểm tra ở bước exchange token (bước này cần truyềncodeVerifier
) để kiểm tra xem cặp giá trị này được tạo đúng từ phía client hay không.scopes
: Nếu không truyền hoặc truyền rỗng sẽ lấy theo thông tin mặc định đã được đăng ký. Tham khảo tài liệu trường thông tin người dùng (scopes)extraParams
: Các params mà client muốn thêm vào phục vụ cho việc lấy authorization code nhưauth_method
,source
,lang
... Tham khảo
Kết quả nhận được
URI đã được encode và chuyển hướng đến redirectUri
, trên giao hiện sẽ hiển thị giao diện login hub để cho người dùng thực hiện quá trình xác thực thông tin
String uri = ecnSdkClient.createRedirectUrl(redirectUri, state, codeChallenge, scopes, params);
RedirectView redirectView = new RedirectView(uri);
return redirectView;
4. Access Token
Lấy access_token
sử dụng code
và state
Để có thể nhận callback từ hệ thống GG ID ở bước 7, ta phải tạo controller với phương thức HTTP GET để có thể lấy được thông tin state
, code
và error
(optional)
@GetMapping("/gg/callback")
public ResponseEntity<Object> handleGGCallback(
@RequestParam() String state,
@RequestParam(required = false) String code,
@RequestParam(required = false) String error,
HttpServletResponse httpServletResponse) {
}
Đường dẫn /gg/callback
là đường nằm trong biến redirectUri
ở 3. Tạo redirectUrl, nếu không có error
, dựa vào thông tin state
và code
và gọi hàm exchangeToken
để lấy thông tin access_token
public interface EcnSdkClient {
ExchangeTokenResponse exchangeToken(String redirectUri, String code, String codeVerifier);
}
Thông tin dữ liệu đầu vào
redirectUri
: Cùng thông tin biến được truyền ởEcnSdkClient.createRedirectUrl()
code
: nhận được từ params callback ở bước 9.codeVerifier
: Dựa vàostate
để lấy thông tincode_verifier
ở bước 3.
Kết quả nhận được
- ExchangeTokenResponse: Thông tin liên quan đến token
access_token
,refresh_token
,...
5. Thông tin người dùng
Lấy thông tin người dùng bằng cách sử dụng accessToken
public interface EcnSdkClient {
GetUserInfoResponse getUserInfo(GetUserInfoRequest request);
}
Thông tin dữ liệu đầu vào
accessToken
: Có được ở 4. Access Tokenscopes
: Các thông tin của người dùng, nếu không được truyền sẽ lấy thông tin mặc định, các thông tin vềscope
của người dùng được thể hiện trong classOAuthScope
hoặc tham khảo tài liệu trường thông tin người dùng (scopes)
Kết quả nhận được
- Nếu thành công sẽ trả về các thông tin của người dùng được định nghĩa trong
scopes
nhưdisplayName
,userId
,email
,... - Nếu thất bại sẽ trả về mã lỗi
error
, mô tả mã lỗierror_description
, tham khảo về tài liệu mã lỗi
6. Thu hồi quyền truy cập
Sau khi thu hồi quyền truy cập của accessToken
, accessToken
hiện tại sẽ không thể sử dụng được nữa.
public interface EcnSdkClient {
RevokeAccessTokenResponse revokeToken(String accessToken);
}
Thông tin dữ liệu đầu vào
accessToken
: thông tin được lấy ở 4. Access Token
Kết quả nhận được
Trả về trạng thái token, thành công
status: true
, thất bạistatus: false
Nếu thất bại sẽ trả về mã lỗi
error
, mô tả mã lỗierror_description
, tham khảo tài liệu mã lỗi
Demo
Tham khảo ứng dụng demo và chọn Đăng nhập REDIRECT
Tham khảo mã nguồn demo tích hợp phía server side
Tham khảo mã nguồn ECN Java SDK
Nếu muốn sử dụng trực tiếp các API bên phía GG hỗ trợ trong trường hợp sử dụng khác ngôn ngữ Java
, có thể tham khảo thêm tại social API
Nhật ký thay đổi phiên bản
Theo dõi thay đổi của từng phiên bản tại đây.
Hỗ trợ
Nếu có thắc mắc trong quá trình tích hợp, bạn có thể liên hệ trực tiếp qua email BaoNQ3 để được trợ giúp.
Thông tin và bài viết liên quan khác
- Tài liệu Login SDK dành cho JavaScript - Đăng nhập dạng POPUP
- Tài liệu Login SDK dành cho JavaScript - Đăng nhập dạng REDIRECT