Các tài khoản được liên kết bằng các quy trình ngầm ẩn và mã uỷ quyền OAuth 2.0 theo tiêu chuẩn ngành. Dịch vụ của bạn phải hỗ trợ các điểm cuối uỷ quyền và trao đổi mã thông báo tuân thủ OAuth 2.0.
Trong luồng ngầm ẩn, Google sẽ mở điểm cuối uỷ quyền của bạn trong trình duyệt của người dùng. Sau khi đăng nhập thành công, bạn sẽ trả về một mã thông báo truy cập có thời hạn dài cho Google. Mã truy cập này hiện được đưa vào mọi yêu cầu do Google gửi.
Trong quy trình mã uỷ quyền, bạn cần có hai điểm cuối:
Điểm cuối uỷ quyền hiển thị giao diện người dùng đăng nhập cho những người dùng chưa đăng nhập. Điểm cuối uỷ quyền cũng tạo một mã uỷ quyền ngắn hạn để ghi lại sự đồng ý của người dùng đối với quyền truy cập đã yêu cầu.
Điểm cuối trao đổi mã thông báo chịu trách nhiệm cho hai loại giao dịch:
- Trao đổi mã uỷ quyền lấy mã làm mới dài hạn và mã truy cập ngắn hạn. Quá trình trao đổi này diễn ra khi người dùng thực hiện quy trình liên kết tài khoản.
- Trao đổi mã làm mới dài hạn cho mã truy cập ngắn hạn. Quá trình trao đổi này xảy ra khi Google cần một mã thông báo truy cập mới vì mã thông báo cũ đã hết hạn.
Chọn quy trình OAuth 2.0
Mặc dù quy trình ngầm ẩn dễ triển khai hơn, nhưng bạn nên đảm bảo rằng mã truy cập do luồng ngầm ẩn cấp không bao giờ hết hạn. Điều này là do người dùng buộc phải liên kết lại tài khoản của họ sau khi mã thông báo hết hạn bằng luồng ngầm ẩn. Nếu cần hết hạn mã thông báo vì lý do bảo mật, bạn nên sử dụng quy trình mã uỷ quyền.
Hướng dẫn thiết kế
Phần này mô tả các yêu cầu và đề xuất về thiết kế đối với màn hình người dùng mà bạn lưu trữ cho các quy trình liên kết OAuth. Sau khi được ứng dụng của Google gọi, nền tảng của bạn sẽ hiển thị trang đăng nhập vào Google và màn hình đồng ý liên kết tài khoản cho người dùng. Người dùng được chuyển hướng trở lại ứng dụng của Google sau khi đồng ý liên kết tài khoản.
Yêu cầu
- Bạn phải thông báo rằng tài khoản của người dùng sẽ được liên kết với Google, chứ không phải một sản phẩm cụ thể của Google như Google Home hoặc Trợ lý Google.
Đề xuất
Bạn nên thực hiện những điều sau:
Hiển thị Chính sách quyền riêng tư của Google. Đưa một đường liên kết đến Chính sách quyền riêng tư của Google trên màn hình xin phép.
Dữ liệu sẽ được chia sẻ. Sử dụng ngôn từ rõ ràng và súc tích để cho người dùng biết Google yêu cầu dữ liệu nào của họ và lý do tại sao.
Lời kêu gọi hành động rõ ràng. Đưa ra lời kêu gọi hành động rõ ràng trên màn hình xin phép, chẳng hạn như “Đồng ý và liên kết”. Điều này là vì người dùng cần biết dữ liệu nào họ cần phải chia sẻ với Google để liên kết tài khoản của họ.
Khả năng huỷ. Cung cấp cách để người dùng quay lại hoặc huỷ nếu họ chọn không liên kết.
Quy trình đăng nhập rõ ràng. Đảm bảo rằng người dùng có phương thức rõ ràng để đăng nhập vào Tài khoản Google của họ, chẳng hạn như các trường cho tên người dùng và mật khẩu hoặc Đăng nhập bằng Google.
Có thể huỷ liên kết. Cung cấp cơ chế để người dùng huỷ liên kết, chẳng hạn như một URL đến phần cài đặt tài khoản của họ trên nền tảng của bạn. Ngoài ra, bạn có thể thêm một đường liên kết đến Tài khoản Google để người dùng có thể quản lý tài khoản được liên kết của họ.
Khả năng thay đổi tài khoản người dùng. Đề xuất một phương thức để người dùng chuyển đổi(các) tài khoản của họ. Điều này đặc biệt có lợi nếu người dùng có xu hướng sử dụng nhiều tài khoản.
- Nếu người dùng phải đóng màn hình đồng ý để chuyển đổi tài khoản, hãy gửi lỗi có thể khôi phục cho Google để người dùng có thể đăng nhập vào tài khoản mong muốn bằng tính năng liên kết OAuth và quy trình ngầm ẩn.
Thêm biểu trưng của bạn. Hiển thị biểu trưng của công ty bạn trên màn hình xin phép. Sử dụng nguyên tắc thiết kế để đặt biểu trưng. Nếu bạn cũng muốn hiển thị biểu trưng của Google, hãy xem phần Biểu trưng và nhãn hiệu.
Tạo dự án
Cách tạo dự án để sử dụng tính năng liên kết tài khoản:
- Nhấp vào Tạo dự án.
- Nhập tên hoặc chấp nhận tên được đề xuất.
- Xác nhận hoặc chỉnh sửa mọi trường còn lại.
- Nhấp vào Tạo.
Cách xem mã dự án:
- Tìm dự án của bạn trong bảng trên trang đích. Mã dự án xuất hiện trong cột Mã.
Định cấu hình màn hình đồng ý OAuth
Quy trình Liên kết với Tài khoản Google bao gồm một màn hình yêu cầu sự đồng ý cho người dùng biết ứng dụng đang yêu cầu quyền truy cập vào dữ liệu của họ, loại dữ liệu mà ứng dụng đang yêu cầu và các điều khoản áp dụng. Bạn cần định cấu hình màn hình đồng ý OAuth trước khi tạo mã ứng dụng Google API.
- Mở trang màn hình đồng ý OAuth của Google API Console.
- Nếu được nhắc, hãy chọn dự án mà bạn vừa tạo.
Trên trang "Màn hình xin phép bằng OAuth", hãy điền thông tin vào biểu mẫu rồi nhấp vào nút "Lưu".
Tên ứng dụng: Tên của ứng dụng yêu cầu sự đồng ý. Tên này phải phản ánh chính xác ứng dụng của bạn và nhất quán với tên ứng dụng mà người dùng thấy ở những nơi khác. Tên ứng dụng sẽ xuất hiện trên màn hình đồng ý Liên kết tài khoản.
Biểu trưng ứng dụng: Một hình ảnh trên màn hình đồng ý giúp người dùng nhận ra ứng dụng của bạn. Biểu trưng này xuất hiện trên màn hình đồng ý liên kết tài khoản và trên chế độ cài đặt tài khoản
Email hỗ trợ: Để người dùng liên hệ với bạn khi có thắc mắc về sự đồng ý của họ.
Phạm vi cho các API của Google: Phạm vi cho phép ứng dụng của bạn truy cập vào dữ liệu riêng tư của người dùng trên Google. Đối với trường hợp sử dụng Liên kết với Tài khoản Google, phạm vi mặc định (email, hồ sơ, openid) là đủ, bạn không cần thêm bất kỳ phạm vi nhạy cảm nào. Thông thường, bạn nên yêu cầu các phạm vi theo từng bước, tại thời điểm cần truy cập, thay vì yêu cầu trước. Tìm hiểu thêm.
Miền được uỷ quyền: Để bảo vệ bạn và người dùng, Google chỉ cho phép những ứng dụng xác thực bằng OAuth sử dụng Miền được uỷ quyền. Đường liên kết đến các ứng dụng của bạn phải được lưu trữ trên Miền được uỷ quyền. Tìm hiểu thêm.
Đường liên kết đến trang chủ của ứng dụng: Trang chủ của ứng dụng. Phải được lưu trữ trên một Miền được uỷ quyền.
Đường liên kết đến Chính sách quyền riêng tư của ứng dụng: Xuất hiện trên màn hình xin phép Liên kết với Tài khoản Google. Phải được lưu trữ trên một Miền được uỷ quyền.
Đường liên kết đến Điều khoản dịch vụ của ứng dụng (Không bắt buộc): Phải được lưu trữ trên một Miền được uỷ quyền.
Hình 1 Màn hình đồng ý liên kết Tài khoản Google cho một Ứng dụng giả tưởng, Tunery
Kiểm tra "Trạng thái xác minh". Nếu ứng dụng của bạn cần xác minh, hãy nhấp vào nút "Gửi để xác minh" để gửi ứng dụng của bạn đi xác minh. Hãy tham khảo các yêu cầu xác minh OAuth để biết thông tin chi tiết.
Triển khai máy chủ OAuth
Để hỗ trợ quy trình ngầm OAuth 2.0, dịch vụ của bạn sẽ thực hiện uỷ quyền điểm cuối được cung cấp bởi HTTPS. Điểm cuối này chịu trách nhiệm xác thực và có được sự đồng ý của người dùng về việc truy cập dữ liệu. Điểm cuối uỷ quyền biểu thị giao diện người dùng đăng nhập cho những người dùng chưa đăng nhập và ghi lại đồng ý với quyền truy cập được yêu cầu.
Khi ứng dụng của Google cần gọi một trong những API được uỷ quyền của dịch vụ, Google sử dụng điểm cuối này để yêu cầu người dùng cho phép gọi các API này thay mặt cho công ty.
Một phiên luồng quy trình ngầm ẩn OAuth 2.0 điển hình do Google khởi tạo có quy trình sau:
- Google sẽ mở điểm cuối uỷ quyền của bạn trong trình duyệt của người dùng. Chiến lược phát hành đĩa đơn người dùng đăng nhập, nếu chưa đăng nhập và cấp cho Google quyền truy cập vào dữ liệu của họ bằng API của bạn nếu họ chưa cấp quyền.
- Dịch vụ của bạn sẽ tạo mã truy cập rồi trả lại cho Google. Để thực hiện việc này, hãy chuyển hướng trình duyệt của người dùng trở lại Google bằng quyền truy cập vào yêu cầu.
- Google gọi các API của dịch vụ và đính kèm mã truy cập bằng từng yêu cầu. Dịch vụ của bạn xác minh rằng mã truy cập cấp cho Google uỷ quyền truy cập API, sau đó hoàn tất lệnh gọi API.
Xử lý yêu cầu uỷ quyền
Khi một ứng dụng của Google cần thực hiện liên kết tài khoản qua OAuth 2.0 luồng ngầm ẩn, Google sẽ chuyển người dùng đến điểm cuối uỷ quyền của bạn bằng bao gồm các thông số sau:
| Tham số điểm cuối ủy quyền | |
|---|---|
client_id |
Mã ứng dụng khách mà bạn đã chỉ định cho Google. |
redirect_uri |
URL mà bạn gửi phản hồi tới yêu cầu này. |
state |
Giá trị sổ sách được chuyển lại cho Google không thay đổi trong URI chuyển hướng. |
response_type |
Loại giá trị cần trả về trong phản hồi. Đối với OAuth 2.0 ngầm ẩn
luồng, loại phản hồi luôn là token. |
user_locale |
Chế độ cài đặt ngôn ngữ trong Tài khoản Google trong RFC5646 định dạng dùng để bản địa hoá nội dung của bạn sang ngôn ngữ ưu tiên của người dùng. |
Ví dụ: nếu điểm cuối uỷ quyền của bạn có tại
https://myservice.example.com/auth, một yêu cầu có thể có dạng như sau:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE
Để điểm cuối uỷ quyền của bạn có thể xử lý các yêu cầu đăng nhập, hãy làm như sau các bước:
Xác minh các giá trị
client_idvàredirect_uriđể ngăn việc cấp quyền truy cập vào các ứng dụng khách ngoài ý muốn hoặc bị định cấu hình sai:- Xác nhận rằng
client_idkhớp với mã ứng dụng khách mà bạn được chỉ định cho Google. - Xác nhận rằng URL do
redirect_urichỉ định thông số đó có dạng như sau:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Xác nhận rằng
Kiểm tra xem người dùng đã đăng nhập vào dịch vụ của bạn chưa. Nếu người dùng chưa ký hãy hoàn tất quy trình đăng nhập hoặc đăng ký dịch vụ của bạn.
Tạo mã truy cập cho Google dùng để truy cập vào API của bạn. Chiến lược phát hành đĩa đơn mã truy cập có thể là bất kỳ giá trị chuỗi nào, nhưng mã này phải thể hiện duy nhất người dùng và máy khách của mã thông báo đó và không được phép đoán.
Gửi phản hồi HTTP chuyển hướng trình duyệt của người dùng đến URL do tham số
redirect_urichỉ định. Bao gồm tất cả các tham số sau trong phân đoạn URL:access_token: Mã truy cập bạn vừa tạotoken_type: Chuỗibearerstate: Giá trị trạng thái chưa được sửa đổi của giá trị gốc yêu cầu
Sau đây là ví dụ về URL kết quả:
https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
Trình xử lý chuyển hướng OAuth 2.0 của Google nhận được mã truy cập và xác nhận
rằng giá trị state không thay đổi. Sau khi Google có được
mã truy cập của dịch vụ của bạn, Google sẽ đính kèm mã này vào các lệnh gọi tiếp theo
cho các API dịch vụ của bạn.
处理 userinfo 请求
userinfo 端点是受 OAuth 2.0 保护的资源,会返回关联用户的声明。实现和托管 userinfo 端点是可选的,但以下用例除外:
从您的令牌端点成功检索到访问令牌后,Google 会向您的 userinfo 端点发送请求,以检索关联用户的基本个人资料信息。
| userinfo 端点请求标头 | |
|---|---|
Authorization header |
Bearer 类型的访问令牌。 |
例如,如果您的 userinfo 端点可通过
https://myservice.example.com/userinfo 时,请求可能如下所示:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
为了让 userinfo 端点能够处理请求,请执行以下步骤:
- 从 Authorization 标头中提取访问令牌,并返回与访问令牌相关联的用户的信息。
- 如果访问令牌无效,则使用
WWW-Authenticate响应标头返回 HTTP 401 Unauthorized 错误。下面是一个 userinfo 错误响应示例: 如果在关联过程中返回 401 未经授权错误或任何其他失败的错误响应,该错误将无法恢复,检索到的令牌将被舍弃,并且用户必须重新开始关联流程。HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
如果访问令牌有效,则返回 HTTPS 正文中包含以下 JSON 对象的 HTTP 200 响应 回答:
如果您的 userinfo 端点返回 HTTP 200 成功响应,则系统会针对用户的 Google 账号注册检索到的令牌和声明。{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }userinfo 端点响应 sub系统中用于识别用户的唯一 ID。 email用户的电子邮件地址。 given_name可选:用户的名字。 family_name可选:用户的姓氏。 name可选:用户的全名。 picture可选:用户的个人资料照片。
Xác thực quá trình triển khai
Bạn có thể xác thực phương thức triển khai bằng cách sử dụng công cụ OAuth 2.0 Playground.
Trong công cụ này, hãy làm theo các bước sau:
- Nhấp vào biểu tượng Configuration (Cấu hình) để mở cửa sổ OAuth 2.0 Configuration (Cấu hình OAuth 2.0).
- Trong trường Quy trình OAuth, hãy chọn Phía máy khách.
- Trong trường OAuth Endpoints (Điểm cuối OAuth), hãy chọn Custom (Tuỳ chỉnh).
- Chỉ định điểm cuối OAuth 2.0 và mã ứng dụng khách mà bạn đã chỉ định cho Google trong các trường tương ứng.
- Trong phần Bước 1, đừng chọn bất kỳ phạm vi nào của Google. Thay vào đó, hãy để trống trường này hoặc nhập một phạm vi hợp lệ cho máy chủ của bạn (hoặc một chuỗi tuỳ ý nếu bạn không sử dụng phạm vi OAuth). Khi bạn hoàn tất, hãy nhấp vào Uỷ quyền cho API.
- Trong các mục Bước 2 và Bước 3, hãy thực hiện quy trình OAuth 2.0 và xác minh rằng mỗi bước hoạt động như dự kiến.
Bạn có thể xác thực việc triển khai của mình bằng cách sử dụng công cụ Bản minh hoạ về cách liên kết Tài khoản Google.
Trong công cụ này, hãy làm theo các bước sau:
- Nhấp vào nút Đăng nhập bằng Google.
- Chọn tài khoản mà bạn muốn liên kết.
- Nhập mã dịch vụ.
- Bạn có thể nhập một hoặc nhiều phạm vi mà bạn sẽ yêu cầu quyền truy cập.
- Nhấp vào Bắt đầu bản minh hoạ.
- Khi được nhắc, hãy xác nhận rằng bạn có thể đồng ý và từ chối yêu cầu liên kết.
- Xác nhận rằng bạn được chuyển hướng đến nền tảng của mình.