Bạn có thể cho phép người dùng đăng nhập vào ứng dụng của mình bằng Tài khoản Google của họ trên những thiết bị có chức năng nhập dữ liệu bị hạn chế, chẳng hạn như TV có kết nối Internet.
Ứng dụng sẽ hiển thị một mã ngắn và URL đăng nhập cho người dùng. Sau đó, người dùng mở URL đăng nhập trong trình duyệt web, nhập mã và cấp cho ứng dụng quyền truy cập thông tin đăng nhập của người dùng. Cuối cùng, ứng dụng nhận được thông báo xác nhận và người dùng đã đăng nhập.
Để sử dụng quy trình đăng nhập này, ứng dụng phải chạy trên một thiết bị đáp ứng các tiêu chí sau:
- Thiết bị phải có khả năng hiển thị URL gồm 40 ký tự và một mã người dùng gồm 15 ký tự, kèm theo hướng dẫn dành cho người dùng.
- Thiết bị phải được kết nối với Internet.
Lấy mã ứng dụng và mật khẩu ứng dụng
Ứng dụng của bạn cần mã ứng dụng khách OAuth 2.0 và mật khẩu ứng dụng để gửi yêu cầu đến điểm cuối đăng nhập của Google.
Để tìm mã ứng dụng khách và mật khẩu ứng dụng của dự án, hãy làm như sau:
- Chọn thông tin đăng nhập OAuth 2.0 hiện có hoặc mở trang Thông tin xác thực.
- Nếu bạn chưa làm việc này, hãy tạo thông tin đăng nhập OAuth 2.0 cho dự án của mình bằng cách nhấp vào Tạo thông tin xác thực > mã ứng dụng khách OAuth rồi cung cấp thông tin cần thiết để tạo thông tin đăng nhập.
- Tìm Mã ứng dụng trong phần Mã ứng dụng OAuth 2.0. Để biết chi tiết, nhấp vào ID ứng dụng.
Nếu bạn đang tạo mã nhận dạng ứng dụng mới, hãy chọn loại ứng dụng TV và thiết bị đầu vào giới hạn.
Lấy mã người dùng và URL xác minh
Sau khi người dùng yêu cầu đăng nhập bằng Tài khoản Google, bạn sẽ nhận được mã người dùng
và URL xác minh bằng cách gửi yêu cầu POST HTTP tới điểm cuối
của thiết bị OAuth 2.0, https://oauth2.googleapis.com/device/code
. Bao gồm
mã ứng dụng của bạn và danh sách các phạm vi bạn cần với yêu cầu. Nếu bạn chỉ muốn
đăng nhập vào những người dùng bằng Tài khoản Google của họ, chỉ yêu cầu phạm vi profile
và
email
; hoặc nếu bạn muốn yêu cầu quyền gọi
API được hỗ trợ
thay mặt người dùng, hãy yêu cầu phạm vi bắt buộc ngoài phạm vi profile
và email
.
Sau đây là ví dụ về yêu cầu mã người dùng:
POST /device/code HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=CLIENT_ID&scope=email%20profile
Sử dụng curl
:
curl -d "client_id=CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code
Phản hồi được trả về dưới dạng đối tượng JSON:
{
"device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
"user_code" : "GQVQ-JKEC",
"verification_url" : "https://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
Ứng dụng của bạn hiển thị các giá trị user_code
và verification_url
cho người dùng
và đồng thời, thăm dò ý kiến đăng nhập điểm cuối tại interval
được chỉ định cho đến khi người dùng đăng nhập hoặc thời gian do expires_in
chỉ định trôi qua.
Hiển thị mã người dùng và URL xác minh
Sau khi bạn nhận được mã người dùng và URL xác minh từ điểm cuối của thiết bị, hãy hiển thị các mã đó và hướng dẫn người dùng mở URL rồi nhập mã người dùng.
Giá trị của verification_url
và user_code
có thể thay đổi. Thiết kế
giao diện người dùng theo cách có thể xử lý các giới hạn sau:
user_code
phải hiển thị trong một trường đủ rộng để xử lý 15 ký tự có kích thướcW
.verification_url
phải hiển thị trong trường đủ rộng để xử lý chuỗi URL dài 40 ký tự.
Cả hai chuỗi đều có thể chứa bất kỳ ký tự nào có thể in từ bộ ký tự US-ASCII.
Khi bạn hiển thị chuỗi user_code
, đừng sửa đổi chuỗi theo bất kỳ cách nào
(chẳng hạn như thay đổi cách viết hoa hoặc chèn các ký tự định dạng khác), vì
ứng dụng của bạn có thể bị hỏng nếu định dạng của mã thay đổi trong tương lai.
Bạn có thể sửa đổi chuỗi verification_url
bằng cách loại bỏ lược đồ khỏi
URL cho mục đích hiển thị nếu chọn. Nếu bạn làm như vậy, hãy đảm bảo ứng dụng của bạn có thể
xử lý cả biến "http" và "https" các biến thể. Đừng sửa đổi
verification_url
chuỗi.
Khi người dùng chuyển đến URL xác minh, họ sẽ thấy một trang tương tự như sau:
Sau khi người dùng nhập mã người dùng, trang web đăng nhập bằng Google sẽ hiển thị màn hình lấy sự đồng ý tương tự như sau:
Nếu người dùng nhấp vào Cho phép, thì ứng dụng của bạn có thể lấy mã thông báo mã để nhận dạng người dùng, mã truy cập để gọi API Google và mã làm mới để lấy mã mới.
Lấy mã thông báo nhận dạng và làm mới mã thông báo
Sau khi ứng dụng của bạn hiển thị mã người dùng và URL xác minh, hãy bắt đầu thăm dò
điểm cuối mã thông báo (https://oauth2.googleapis.com/token
) bằng mã thiết bị
mà bạn đã nhận được từ điểm cuối thiết bị. Thăm dò điểm cuối mã thông báo tại
khoảng thời gian, tính bằng giây, do giá trị interval
chỉ định.
Sau đây là yêu cầu mẫu:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0
Sử dụng curl
:
curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token
Nếu người dùng chưa chấp thuận yêu cầu, thì phản hồi như sau:
{
"error" : "authorization_pending"
}
Ứng dụng của bạn nên lặp lại những yêu cầu như vậy ở mức giá không vượt quá
giá trị của interval
. Nếu cuộc thăm dò ý kiến trên ứng dụng của bạn quá nhanh, thì phản hồi như sau:
{
"error" : "slow_down"
}
Sau khi người dùng đăng nhập và cấp cho ứng dụng quyền truy cập vào các phạm vi mà bạn đã yêu cầu, phản hồi cho yêu cầu tiếp theo của ứng dụng sẽ bao gồm mã xác minh, mã truy cập và mã làm mới:
{
"access_token" : "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
"id_token": "eyJhbGciOiJSUzI..."
}
Sau khi nhận được phản hồi này, ứng dụng của bạn có thể giải mã mã thông báo nhận dạng để nhận thông tin cơ bản về hồ sơ về người dùng đã đăng nhập hoặc gửi mã thông báo nhận dạng tới máy chủ phụ trợ của ứng dụng để xác thực an toàn với máy chủ. Ngoài ra, ứng dụng của bạn có thể sử dụng mã truy cập để gọi API Google mà người dùng đã cho phép.
Mã nhận dạng và mã truy cập có thời gian hoạt động giới hạn. Để duy trì trạng thái đăng nhập của người dùng ngoài mã thông báo, hãy lưu trữ mã làm mới và sử dụng mã này để yêu cầu mã thông báo mới.
Lấy thông tin hồ sơ người dùng từ mã thông báo nhận dạng
Bạn có thể lấy thông tin hồ sơ về người dùng đã đăng nhập bằng cách giải mã mã thông báo cho mọi thư viện giải mã JWT. Ví dụ: sử dụng thư viện Auth0 jwt-decode JavaScript:
var user_profile = jwt_decode(id_token); // The "sub" field is available on all ID tokens. This value is unique for each // Google account and can be used to identify the user. (But do not send this // value to your server; instead, send the whole ID token so its authenticity // can be verified.) var user_id = user_profile["sub"]; // These values are available when you request the "profile" and "email" scopes. var user_email = user_profile["email"]; var email_verified = user_profile["email_verified"]; var user_name = user_profile["name"]; var user_photo_url = user_profile["picture"]; var user_given_name = user_profile["given_name"]; var user_family_name = user_profile["family_name"]; var user_locale = user_profile["locale"];
Thông tin khác
- Để duy trì trạng thái đăng nhập của người dùng sau một thời gian sử dụng mã thông báo mã, hãy xem phần Làm mới mã truy cập.
- Nếu bạn cần xác thực với một máy chủ phụ trợ, hãy xem phần Xác thực bằng máy chủ phụ trợ để biết thông tin về cách thực hiện việc này một cách an toàn.