Tính năng Liên kết Tài khoản Google giúp chủ sở hữu Tài khoản Google kết nối nhanh chóng, liền mạch và an toàn với các dịch vụ của bạn, đồng thời chia sẻ dữ liệu với Google.
Tính năng Đăng nhập bằng tài khoản được liên kết cho phép Đăng nhập bằng một lần chạm bằng Google đối với những người dùng đã liên kết Tài khoản Google của họ với dịch vụ của bạn. Điều này giúp cải thiện trải nghiệm cho người dùng vì họ có thể đăng nhập chỉ bằng một lần nhấp mà không cần nhập lại tên người dùng và mật khẩu. Điều này cũng làm giảm khả năng người dùng tạo tài khoản trùng lặp trên dịch vụ của bạn.
Yêu cầu
Để triển khai tính năng Đăng nhập bằng tài khoản được liên kết, bạn phải đáp ứng các yêu cầu sau:
- Bạn đã triển khai tính năng Liên kết OAuth với Tài khoản Google hỗ trợ quy trình mã uỷ quyền OAuth 2.0. Quá trình triển khai OAuth của bạn phải bao gồm các điểm cuối sau:
- điểm cuối uỷ quyền để xử lý các yêu cầu uỷ quyền.
- điểm cuối mã thông báo để xử lý yêu cầu cấp quyền truy cập và làm mới mã thông báo.
- điểm cuối userinfo để truy xuất thông tin tài khoản cơ bản về người dùng được liên kết. Thông tin này sẽ hiển thị cho người dùng trong quá trình Đăng nhập bằng tài khoản được liên kết.
- Bạn có một ứng dụng Android.
Cách hoạt động
Điều kiện tiên quyết : Người dùng đã liên kết Tài khoản Google của họ với tài khoản trên dịch vụ của bạn.
- Bạn chọn hiển thị các tài khoản được liên kết trong quy trình Đăng nhập một lần chạm.
- Người dùng sẽ thấy lời nhắc Đăng nhập một lần chạm cùng với lựa chọn đăng nhập vào dịch vụ của bạn bằng tài khoản đã liên kết.
- Nếu người dùng chọn tiếp tục bằng tài khoản đã liên kết, Google sẽ gửi một yêu cầu đến điểm cuối mã thông báo của bạn để lưu mã uỷ quyền. Yêu cầu này chứa mã truy cập của người dùng do dịch vụ của bạn phát hành và mã uỷ quyền của Google.
- Bạn trao đổi mã uỷ quyền của Google để lấy mã thông báo mã nhận dạng của Google chứa thông tin về Tài khoản Google của người dùng.
- Ứng dụng của bạn cũng nhận được mã thông báo nhận dạng khi quy trình này kết thúc và bạn so khớp mã thông báo này với giá trị nhận dạng người dùng trong mã thông báo nhận dạng mà máy chủ của bạn đã nhận được để đăng nhập người dùng vào ứng dụng.
![Đăng nhập bằng tài khoản được liên kết.](https://developer.android.com/static/identity/legacy/one-tap/images/linked-account-signin.png?hl=vi)
Triển khai tính năng Đăng nhập bằng tài khoản được liên kết trong ứng dụng Android
Để hỗ trợ tính năng Đăng nhập bằng tài khoản được liên kết trên ứng dụng Android, hãy làm theo hướng dẫn trong Hướng dẫn triển khai trên Android.
Xử lý các yêu cầu mã uỷ quyền của Google
Google gửi một yêu cầu POST đến điểm cuối mã thông báo của bạn để lưu mã uỷ quyền mà bạn trao đổi cho mã thông báo nhận dạng của người dùng. Yêu cầu này chứa mã truy cập của người dùng và mã uỷ quyền OAuth2 do Google phát hành.
Trước khi lưu mã uỷ quyền, bạn phải xác minh mã truy cập mà bạn đã cấp cho Google, được xác định bằng client_id
.
Yêu cầu HTTP
Yêu cầu mẫu
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN
Điểm cuối trao đổi mã thông báo của bạn phải có khả năng xử lý các tham số yêu cầu sau:
Thông số điểm cuối mã thông báo | |
---|---|
code |
Bắt buộc Mã uỷ quyền Google OAuth2 |
client_id |
Bắt buộc Mã ứng dụng mà bạn đã cấp cho Google |
client_secret |
Bắt buộc Mã xác thực ứng dụng mà bạn đã cấp cho Google |
access_token |
Bắt buộc Mã truy cập mà bạn đã cấp cho Google. Bạn sẽ sử dụng thông tin này để lấy ngữ cảnh của người dùng |
grant_type |
Bắt buộc Giá trị PHẢI được đặt thành urn:ietf:params:oauth:grant-type:reciprocal |
Điểm cuối trao đổi mã thông báo của bạn sẽ phản hồi yêu cầu POST bằng cách làm như sau:
- Xác minh
access_token
đã được cấp cho Google doclient_id
xác định. - Phản hồi bằng phản hồi HTTP 200 (OK) nếu yêu cầu hợp lệ và mã xác thực được trao đổi thành công cho mã thông báo nhận dạng của Google hoặc mã lỗi HTTP nếu yêu cầu không hợp lệ.
Phản hồi HTTP
Thành công
Trả về mã trạng thái HTTP 200 OK
Mẫu phản hồi thành công
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}
Lỗi
Trong trường hợp yêu cầu HTTP không hợp lệ, hãy phản hồi bằng một trong các mã lỗi HTTP sau:
Mã trạng thái HTTP | Nội dung | Mô tả |
---|---|---|
400 | {"error": "invalid_request"} |
Yêu cầu thiếu một tham số nên máy chủ không thể tiếp tục xử lý yêu cầu. Giá trị này cũng có thể được trả về nếu yêu cầu bao gồm một tham số không được hỗ trợ hoặc lặp lại một tham số |
401 | {"error": "invalid_request"} |
Không xác thực được ứng dụng khách, chẳng hạn như nếu yêu cầu chứa mã ứng dụng khách hoặc mã xác thực không hợp lệ |
401 | {"error": "invalid_token"}
Thêm thử thách xác thực "WWW-Authentication: Bearer" vào tiêu đề phản hồi |
Mã thông báo truy cập của đối tác không hợp lệ. |
403 | {"error": "insufficient_permission"}
Thêm thử thách xác thực "WWW-Authentication: Bearer" vào tiêu đề phản hồi |
Mã truy cập của đối tác không chứa(các) phạm vi cần thiết để thực hiện OAuth đối ứng |
500 | {"error": "internal_error"} |
Lỗi máy chủ |
Phản hồi lỗi phải chứa các trường sau :
Trường phản hồi lỗi | |
---|---|
error |
Bắt buộc Chuỗi lỗi |
error_description |
Nội dung mô tả lỗi mà con người đọc được |
error_uri |
URI cung cấp thêm thông tin chi tiết về lỗi |
Phản hồi mẫu về lỗi 400
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_request",
"error_description": "Request was missing the 'access_token' parameter."
}
Trao đổi mã uỷ quyền cho mã thông báo nhận dạng
Bạn sẽ cần trao đổi mã uỷ quyền mà bạn nhận được để lấy mã thông báo mã nhận dạng Google chứa thông tin về Tài khoản Google của người dùng.
Để trao đổi mã uỷ quyền lấy mã thông báo mã nhận dạng Google, hãy gọi điểm cuối https://oauth2.googleapis.com/token
và đặt các tham số sau:
Các trường yêu cầu | |
---|---|
client_id |
Bắt buộc Mã ứng dụng khách lấy được từ trang Thông tin xác thực của Bảng điều khiển API. Thông tin xác thực này thường có tên là Ứng dụng Hành động mới trên Google |
client_secret |
Bắt buộc Khoá bí mật của ứng dụng khách lấy được từ trang Thông tin xác thực của API Console |
code |
Bắt buộc Mã uỷ quyền được gửi trong yêu cầu ban đầu |
grant_type |
Bắt buộc Như đã xác định trong quy cách OAuth 2.0, bạn phải đặt giá trị của trường này thành authorization_code . |
Yêu cầu mẫu
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET
Google phản hồi yêu cầu này bằng cách trả về một đối tượng JSON chứa mã truy cập có thời hạn ngắn và mã làm mới.
Phản hồi chứa các trường sau:
Trường phản hồi | |
---|---|
access_token |
Mã thông báo truy cập do Google phát hành mà ứng dụng của bạn gửi để uỷ quyền cho một yêu cầu API của Google |
id_token |
Mã thông báo nhận dạng chứa thông tin Tài khoản Google của người dùng. Mục Xác thực phản hồi chứa thông tin chi tiết về cách giải mã và xác thực phản hồi mã thông báo nhận dạng |
expires_in |
Thời gian còn lại của mã truy cập tính bằng giây |
refresh_token |
Mã thông báo mà bạn có thể dùng để lấy mã thông báo truy cập mới. Mã thông báo làm mới có hiệu lực cho đến khi người dùng thu hồi quyền truy cập |
scope |
Giá trị của trường này luôn được đặt thành openid cho trường hợp sử dụng Đăng nhập bằng tài khoản được liên kết |
token_type |
Loại mã thông báo được trả về. Tại thời điểm này, giá trị của trường này luôn được đặt thành Bearer |
Nội dung phản hồi mẫu
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8
{
"access_token": "Google-access-token",
"id_token": "Google-ID-token",
"expires_in": 3599,
"token_type": "Bearer",
"scope": "openid",
"refresh_token": "Google-refresh-token"
}
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret