HomeOur Team
Sign In with Apple - Backend (Java)
Solutions
Sign In with Apple - Backend (Java)
hoang.le
hoang.le
October 29, 2020
3 min

Trong bài này, tôi sẽ giải thích cách xử lý đăng nhập với Apple trên server bằng Java.

I. Chuẩn bị

  • Apple Certificate (.p8), that needs to be downloaded
  • Apple Client ID
  • Apple Key ID
  • Apple Team ID
  • Apple URL (https://appleid.apple.com) *Bạn có thể lấy tất cả chúng từ chứng chỉ bạn đã tạo cho Đăng nhập Apple trên Tài khoản nhà phát triển Apple của mình.**

II. Generate JWT Token

  • Bước đầu tiên chúng ta cần tạo khóa bí mật từ file .p8

Chú thích : certPath là đường dẫn file .p8

  • Khi tạo xong khóa bí mật, chúng ta cần lấy khóa bí mật để tạo JWT Token.

Chú thích : Các thông tin ‘KEY_ID’, ‘TEAM_ID’, ‘CLIENT_ID’ là các thông tin ở phần chuẩn bị.

  • Như vậy sau khi thực hiện hàm trên chúng ta sẽ có được JWT Token.

III. Lấy thông tin người dùng

1. Tạo và xác thực mã thông báo

  • Trong bước này, chúng ta cần giá trị ‘code’ hay gọi là mã ủy quyền. Mã ủy quyền nhận được trong phản hồi ủy quyền được gửi đến ứng dụng của bạn. Mã chỉ sử dụng một lần và có giá trị trong năm phút. Tham số này là bắt buộc cho các yêu cầu xác thực mã ủy quyền.

  • Sau đó, chúng ta cần xác thực mã ủy quyền bằng cách gọi API ’https://appleid.apple.com/auth/token’ để xác thực.

  • Trước khi gọi API xác thực chúng ta cần tạo cho mình các đối tượng trả về khi gọi API. TokenResponse class

  • Nếu thành công, chúng ta sẽ nhận được các thông tin sau :

    • access_token : Một mã thông báo được sử dụng để truy cập dữ liệu được phép. Hiện tại, không có tập dữ liệu nào được xác định để truy cập.
    • token_type : oại mã thông báo truy cập. Nó sẽ luôn như vậy bearer.
    • expires_in : Khoảng thời gian, tính bằng giây, trước khi mã thông báo truy cập hết hạn.
    • refresh_token : Mã làm mới được sử dụng để tạo lại mã truy cập mới. Lưu trữ mã thông báo này an toàn trên máy chủ của bạn.
    • id_token : Mã thông báo web JSON chứa thông tin nhận dạng của người dùng.
  • Nếu lỗi, chúng ta sẽ nhận được các loại lỗi khác nhau được thể hiện trong thông tin :

    • error : Một chuỗi mô tả lý do yêu cầu không thành công. Chuỗi bao gồm một giá trị được phép duy nhất. Những giá trị khả thi: invalid_request, invalid_client, invalid_grant, unauthorized_client, unsupported_grant_type, invalid_scope.

2. Lấy thông tin người dùng từ id_token

  • Đến đây thì hầu như mọi thứ đã đơn giản hơn rồi, chúng ta chỉ cần giải mã biến ‘id_token’ lấy được từ API trên là chúng ta đã lấy được thông tin của người dùng.

  • Để giải mã ‘id_token’, chúng ta cần decode và parse id_token.

  • Sau đây là thông tin người dùng khi giải mã xong. AppleIDTokenPayload

    ![](https://s3-ap-southeast-1.amazonaws.com/hackmd.tda-bucket/uploads/upload_978fd0a709a2f62fc0dd0741f14a9cc2.png)
    
  • Các thông tin gồm :

    • iss : Người phát hành đã đăng ký yêu cầu xác định người gốc đã cấp cho khách hàng bí mật. Vì bí mật khách hàng được tạo cho nhóm nhà phát triển của bạn, hãy sử dụng ID nhóm 10 ký tự được liên kết với tài khoản nhà phát triển của bạn.
    • iat : Khi xác nhận quyền sở hữu đã đăng ký được phát hành cho biết thời gian mà bạn đã tạo bí mật cho khách hàng, tính theo số giây kể từ Epoch, tính theo giờ UTC.
    • exp : Thời gian hết hạn yêu cầu đã đăng ký xác định thời gian vào hoặc sau đó bí mật của khách hàng sẽ hết hạn. Giá trị không được lớn hơn 15777000(6 tháng tính bằng giây) từ Thời gian Unix Hiện tại trên máy chủ.
    • aud : Đối tượng đã đăng ký xác nhận quyền sở hữu xác định người nhận mà bí mật của khách hàng được dự định. Vì bí mật của máy khách được gửi đến máy chủ xác nhận, hãy sử dụng .https://appleid.apple.com
    • sub : Yêu cầu chủ thể đã đăng ký xác định người chính là chủ thể của bí mật khách hàng. Vì bí mật ứng dụng khách này dành cho ứng dụng của bạn, hãy sử dụng giá trị tương tự như client_id. Giá trị có phân biệt chữ hoa chữ thường.
  • Quy trình xác thực tổng thể được hiển thị trong sơ đồ dưới đây:


Tags

#signinwithapple#authen#102020
hoang.le

hoang.le

Developer

Related Posts

Sign In with Apple - iOS
Sign In with Apple - iOS
October 29, 2020
3 min
© 2021, All Rights Reserved.

Quick Links

HomeOur Team

Social Media