Gói bảo mật

Hướng dẫn này mô tả một tập hợp các tính năng trả về các tín hiệu đáng tin bổ sung về Tài khoản Google. Các tín hiệu đáng tin này giúp hệ thống quản lý tài khoản của bạn đưa ra quyết định dựa trên rủi ro trong quá trình đăng ký, tạo tài khoản và sau này cho người dùng quay lại.

Phiên

Yêu cầu xác thực của một ứng dụng sẽ trả về Mã thông báo nhận dạng. Ví dụ: khi nút Đăng nhập bằng Google được nhấn, Mã thông báo nhận dạng sẽ được trả về cho ứng dụng hoặc máy chủ ứng dụng Android, iOS hoặc Web hiển thị nút đó.

Việc xác thực để đăng nhập vào Tài khoản Google là một sự kiện riêng biệt. Các xác nhận quyền sở hữu được trả về trong Mã thông báo nhận dạng đại diện cho sự kiện này. Ví dụ: thời gian xác thực và các phương thức được dùng để đăng nhập vào Tài khoản Google.

Có 2 thời điểm xác thực và 2 phiên người dùng:

  • Phiên Người dùng <-> Google được thiết lập khi người dùng đăng nhập vào Tài khoản Google của họ. Google quản lý vòng đời và tính bảo mật của phiên này. Các xác nhận quyền sở hữu auth_timeamr cung cấp cho bạn thông tin chi tiết về phiên này.
  • Phiên Người dùng <-> Ứng dụng của bạn được thiết lập sau khi người dùng đăng nhập vào ứng dụng của bạn, thường được bắt đầu bằng tính năng Đăng nhập bằng Google. Ứng dụng của bạn quản lý phiên này bằng các xác nhận quyền sở hữu để cải thiện các quyết định quản lý tài khoản và phiên.

Người dùng thường tương tác với các dịch vụ của Google trên nhiều thiết bị, chẳng hạn như điện thoại, máy tính, màn hình thông minh hoặc TV. Việc đăng nhập trên mỗi nền tảng hoặc thiết bị sẽ thiết lập một phiên riêng biệt. Đối với các lượt đăng nhập trên web, một phiên sẽ được thiết lập giữa trình duyệt cụ thể và Google; lưu ý rằng các chế độ Duyệt web riêng tư và Ẩn danh sẽ tạo các phiên riêng biệt, biệt lập. Do đó, một Tài khoản Google có thể có nhiều phiên riêng biệt đang hoạt động đồng thời trên nhiều trình duyệt và thiết bị. Để biết thêm thông tin chi tiết, hãy tham khảo bài viết Xem những thiết bị có quyền truy cập vào tài khoản.

Trạng thái Tài khoản Google

Các sự kiện điển hình trong vòng đời của Tài khoản Google là:

Các tính năng của Gói bảo mật được mô tả trong hướng dẫn này áp dụng cho các tài khoản đang hoạt động hoặc bị vô hiệu hoá, nhưng không áp dụng cho các sự kiện tạo hoặc xoá Tài khoản Google.

Google có thể vô hiệu hoá tài khoản bất cứ lúc nào, vì một số lý do, hãy xem bài viết Tài khoản của bạn bị vô hiệu hoá. Khi điều này xảy ra, mọi phiên hoạt động của Google sẽ bị chấm dứt và một sự kiện RISC sẽ được dịch vụ Bảo vệ trên nhiều tài khoản của Google gửi đi. Các tài khoản bị vô hiệu hoá sẽ bị chặn sử dụng tính năng Đăng nhập bằng Google, nghĩa là mã thông báo nhận dạng sẽ không bao giờ được cấp và do đó không thể dùng để theo dõi các tài khoản người dùng bị vô hiệu hoá.

Mặc dù việc nhận các sự kiện Bảo vệ trên nhiều tài khoản (RISC) là không bắt buộc, nhưng các sự kiện này đóng vai trò là tín hiệu quan trọng để quản lý phiên giữa người dùng và ứng dụng của bạn cũng như việc. Hướng dẫn về cách triển khai RISC và phản hồi các sự kiện được mô tả trong bài viết Bảo vệ tài khoản người dùng bằng tính năng Bảo vệ trên nhiều tài khoản.

Thiết lập

Để nhận các xác nhận quyền sở hữu bổ sung, ứng dụng của bạn cần được phát hành, xác minh, và bật các tính năng của gói bảo mật. Bắt đầu bằng cách xác nhận rằng ứng dụng của bạn đã được phát hành và xác minh:

  1. Mở Nền tảng xác thực của Google
  2. Chọn hoặc Tạo Dự án cho ứng dụng của bạn
  3. Nhấp vào Đối tượng rồi xác nhận rằng Trạng thái phát hànhĐang phát hành
  4. Nhấp vào Trung tâm xác minh rồi xác nhận rằng Trạng thái xác minhĐã xác minh

Tiếp theo, hãy bật các xác nhận quyền sở hữu bổ sung:

  1. Nhấp vào Cài đặt trong trình đơn
  2. Trong phần Cài đặt nâng cao, hãy chọn:
    • Xác nhận quyền sở hữu về độ tuổi của phiên để bật auth_time
    • Xác nhận quyền sở hữu về độ mạnh của chế độ xác thực để bật amr

Để tìm hiểu thêm, hãy truy cập vào Trung tâm trợ giúp về quy trình xác minh ứng dụng OAuth.

Tính năng được hỗ trợ

Phần này mô tả các tính năng riêng lẻ tạo nên Gói bảo mật.

Tài liệu tham khảo về phương thức xác thực

Tài liệu tham khảo về phương thức xác thực (amr) là một xác nhận quyền sở hữu OpenID Connect mô tả các phương thức được dùng trong sự kiện xác thực gần nhất giữa người dùng và Google.

Trong số các giá trị IANA.AMR có thể có, Google hỗ trợ các giá trị sau cho biết rằng:

  • hwk đã dùng khoá bảo mật phần cứng
  • mfa đã hoàn tất quy trình Xác thực đa yếu tố
  • pwd đã dùng Mật khẩu
  • swk đã dùng khoá phần mềm, chẳng hạn như Khoá truy cập
  • sms đã dùng tin nhắn SMS để xác minh
  • tel đã dùng cuộc gọi điện thoại để xác minh

Một hoặc nhiều giá trị trong số này được trả về dưới dạng mảng JSON gồm các chuỗi trong xác nhận quyền sở hữu amr của mã thông báo nhận dạng.

Xác nhận quyền sở hữu amr chỉ được đưa vào mã thông báo nhận dạng khi có thông tin về phương thức xác thực được dùng. Xác nhận quyền sở hữu này có thể không xuất hiện ngay cả khi được yêu cầu.

Chủ sở hữu Tài khoản Google có thể chọn yêu cầu 2SV và các phương thức MFA cần dùng. Khi Bảo vệ nâng cao được bật trên Tài khoản Google, bạn phải dùng một phương thức 2SV mạnh, chẳng hạn như khoá bảo mật Titan (hwk) hoặc Khoá truy cập (swk) là bắt buộc. Trong cả hai trường hợp, giá trị mfa sẽ xuất hiện khi bạn dùng nhiều yếu tố trong quá trình đăng nhập vào Tài khoản Google.

Sự xuất hiện của mfa xác nhận rằng sự kiện xác thực đã đáp ứng các yêu cầu của Google đối với tính năng Xác thực đa yếu tố. Ví dụ: quy trình xác thực Tài khoản Google bằng Mật khẩu (pwd) và Khoá truy cập (swk) sẽ tạo ra xác nhận quyền sở hữu này "amr": ["mfa", "pwd", "swk"].

Các tài nguyên này có thêm thông tin về tính bảo mật của tài khoản và quy trình xác thực người dùng: Tăng cường bảo mật cho tài khoản Google bằng Chương trình bảo vệ nâng cao, Đăng nhập bằng khoá truy cập thay vì mật khẩu, và Dùng khoá bảo mật cho tính năng Xác minh 2 bước.

Quản trị viên Workspace kiểm soát chính sách xác thực cho các tài khoản Workspace được quản lý và có thể yêu cầu MFA hoặc sử dụng khoá bảo mật. Hãy xem Tổng quan về tính năng quản lý danh tính của GoogleYêu cầu xác thực đa yếu tố đối với Google Cloud các biện pháp bảo vệ và chế độ kiểm soát khi Đăng nhập để biết thêm thông tin.

Thời gian xác thực

Xác nhận quyền sở hữu auth_time là một phần tiêu chuẩn của giao thức OpenID Connect cung cấp thông tin về thời điểm Người dùng cuối xác thực gần nhất với Google. Đây là một số JSON đại diện cho số giây đã trôi qua kể từ thời điểm bắt đầu của Unix (00:00:00 UTC ngày 1 tháng 1 năm 1970) và là thời điểm người dùng xác thực gần nhất. Hãy coi đây là dấu thời gian cho biết sự kiện đăng nhập gần nhất của người dùng vào Tài khoản Google của họ trên thiết bị hoặc trình duyệt hiện tại. Xác nhận quyền sở hữu này được đưa vào Mã thông báo nhận dạng, là Mã thông báo web JSON (JWT) chứa thông tin đã xác minh về quy trình xác thực và người dùng.

Xác nhận quyền sở hữu auth_time rất hữu ích cho ứng dụng của bạn vì xác nhận quyền sở hữu này cho phép bạn xác định thời điểm gần đây nhất mà người dùng đã đăng nhập vào Tài khoản Google trên thiết bị hoặc trình duyệt mà họ đang sử dụng. Điều này có thể đặc biệt quan trọng đối với các mục đích bảo mật, chẳng hạn như:

  • Đưa ra quyết định sáng suốt về việc ứng dụng của bạn có nên đưa ra thử thách xác thực bổ sung hay không trước khi thực hiện các hành động nhạy cảm của người dùng như xoá tài khoản, thay đổi phương thức liên hệ của tài khoản hoặc thanh toán. Google không hỗ trợ các yêu cầu xác thực lại Tài khoản Google.

  • Sử dụng tính mới và tính ổn định của phiên Tài khoản Google của người dùng làm tín hiệu đáng tin. Nói chung, giá trị auth_time gần đây là dấu hiệu cho thấy tính mới, trong khi giá trị cũ hơn cho thấy tính ổn định.

Đối với các ứng dụng web, sự kết hợp giữa trình duyệt và hệ điều hành của người dùng sẽ tạo thành một phiên sau khi người dùng đăng nhập vào Tài khoản Google của họ. Ngoài ra, trang web của bạn cũng duy trì một phiên người dùng riêng biệt. Giá trị auth_time mới hơn cho biết người dùng đã đăng nhập vào Tài khoản Google của họ gần đây. Đây thường là dấu hiệu cho thấy người dùng đang hoạt động và tương tác, đồng thời có thể được hiểu là tín hiệu cho thấy rủi ro thấp hơn.

Trên các nền tảng di động như Android, người dùng thường đăng nhập trực tiếp vào thiết bị của họ bằng các phương thức sinh trắc học như quét vân tay hoặc khuôn mặt và mã PIN hoặc hình mở khoá dành riêng cho thiết bị. Các ứng dụng và nền tảng di động thường sử dụng các phương thức xác thực dựa trên nền tảng này thay vì tạo một phiên mới với Google, dẫn đến việc đăng nhập vào Tài khoản Google không thường xuyên và các bản cập nhật tương ứng cho auth_time. Vì vậy, ở đây, giá trị auth_time gần đây có thể báo hiệu sự thay đổi đối với phiên Tài khoản Google chạy trong thời gian dài và do đó làm tăng rủi ro.

Tín hiệu đáng tin là một chủ đề phức tạp. auth_time dự kiến sẽ được dùng cùng với các tín hiệu khác, chẳng hạn như việc có bật tính năng xác thực đa yếu tố (MFA) hay không, phương thức xác thực được dùng và thời lượng phiên người dùng giữa ứng dụng và nền tảng của bạn.

Yêu cầu

Phương thức cụ thể được dùng để yêu cầu các xác nhận quyền sở hữu auth_timeamr sẽ khác nhau tuỳ theo API được dùng. Tuy nhiên, mọi API đều có tham số claims không bắt buộc để yêu cầu auth_timeamr.

Giao thức OIDC

Khi sử dụng trực tiếp Nền tảng OAuth, hãy yêu cầu auth_time bằng cách thêm tham số này vào tham số yêu cầu claims không bắt buộc. Đặt giá trị của id_token trường của đối tượng JSON xác nhận quyền sở hữu thành {"auth_time":{"essential":true}}. Tương tự, hãy thêm {"amr":{"essential":true}} vào claims để yêu cầu amr:

https://accounts.google.com/o/oauth2/v2/auth?
response_type=id_token&
client_id=YOUR_CLIENT_ID&
scope=openid email profile&
redirect_uri=https://example.com/user-login&
nonce=123-456-7890&
claims={ "id_token": {
            "auth_time": { "essential":true },
            "amr": {"essential":true}
          }
        }

Hãy xem bài viết OpenID Connect để biết thêm thông tin.

GIS cho Web

Thư viện Đăng nhập bằng Google cho Web có 2 API: HTML và JavaScript để yêu cầu các xác nhận quyền sở hữu bổ sung. Ví dụ: yêu cầu auth_timeamr bằng JavaScript API:

<html>
<body>
  <script src="https://accounts.google.com/gsi/client" async></script>
  <script>
    window.onload = function () {
      google.accounts.id.initialize({
        client_id: "YOUR_WEB_CLIENT_ID",
        callback: function(rsp) { console.log(rsp.credential); },
        essential_claims: "auth_time, amr",
      });
      google.accounts.id.renderButton(
        document.getElementById("buttonDiv"),
        { type: "standard", size: "large" }
      );
    }
  </script>
  <div id="buttonDiv"></div>
</body>
</html>

Hãy xem bài viết Đăng nhập bằng Google cho Web để biết thêm thông tin.

GIS cho Android

Phương thức setClaims và đối tượng Claim được dùng để yêu cầu auth_timeamr.

Cập nhật các phần phụ thuộc của bản dựng để sử dụng các phiên bản mới nhất của thư viện androidx.credentials:credentials-play-services-authcom.google.android.libraries.identity.googleid:googleid.

Khởi tạo các đối tượng Claim thuộc loại auth_timeamr, dùng setClaims để thêm các đối tượng này vào danh sách các lựa chọn đăng nhập:

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    .setAutoSelectEnabled(true)
    .setFilterByAuthorizedAccounts(true)
    .setServerClientId(WEB_CLIENT_ID)
    .setNonce("NONCE")
    .setClaims(ImmutableList.of(
           new Claim("auth_time", true),
           new Claim("amr", true)
    ))
    .build()

Hãy xem bài viết Xác thực người dùng bằng tính năng Đăng nhập bằng Google để biết thêm thông tin.

iOS

SDK Đăng nhập bằng Google cho iOS sẽ thêm đối tượng authTimeClaim và tham số claims vào lớp GIDSignIn được dùng để tuỳ ý yêu cầu auth_timeamr.

Các ứng dụng dùng ASWebAuthenticationSession sẽ cập nhật một vùng chứa cookie dùng chung trên toàn thiết bị. GIDSignIn sử dụng phương thức này theo mặc định trong iOS 12 trở lên và macOS 10.15 trở lên. Trong trường hợp này, người dùng đăng nhập vào Tài khoản Google của họ sẽ được xác thực và phiên sẽ được lưu trữ trong vùng chứa cookie dùng chung. Ở đây, auth_time là lần xác thực gần nhất của người dùng trên Google trên thiết bị, chứ không chỉ trong ứng dụng của bạn.

SFSafariViewController, WKWebViewUIWebView hoạt động trong các hộp cát biệt lập trong ứng dụng của bạn, hãy tránh dùng các hộp cát này khi dùng auth_time. Ở đây, auth_time là lần đăng nhập gần nhất của người dùng vào chính ứng dụng đó. Vì giá trị này luôn mới nên ít có ý nghĩa hơn.

Để yêu cầu auth_time, hãy cập nhật các phần phụ thuộc của GoogleSignIn lên phiên bản mới nhất và tạo đối tượng authTimeClaim, thêm đối tượng này vào tập hợp claims.

Để yêu cầu amr, hãy tạo đối tượng amrClaim và thêm đối tượng này vào tập hợp claims.

Swift

Thêm tập hợp xác nhận quyền sở hữu vào phương thức GIDSignIn.sharedInstance.signIn:

let authTimeClaim = GIDClaim.authTime()
let amrClaim = GIDClaim.amr()
let claims = Set([authTimeClaim, amrClaim])

// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }

Objective-C

Thêm tập hợp xác nhận quyền sở hữu vào phương thức signInWithPresentingViewController:

GIDClaim *authTimeClaim = [GIDClaim authTimeClaim];
GIDClaim *AMRClaim = [GIDClaim AMRClaim];
NSSet *claims = [NSSet setWithArray:@[authTimeClaim, AMRClaim]];

// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];

Hãy xem bài viết Tích hợp tính năng Đăng nhập bằng Google vào ứng dụng iOS hoặc macOS để biết thêm thông tin.

Phản hồi

Khi các xác nhận quyền sở hữu auth_time hoặc amr được đưa vào yêu cầu, các xác nhận quyền sở hữu này sẽ được trả về trong phản hồi tải trọng Mã thông báo nhận dạng cùng với các xác nhận quyền sở hữu tiêu chuẩn khác như iss (nhà phát hành), sub (chủ đề), aud (đối tượng) và exp (thời gian hết hạn).

Các xác nhận quyền sở hữu bị thiếu có thể là do ứng dụng chưa được xác minh hoặc các chế độ cài đặt bổ sung bị tắt (đây là chế độ mặc định). Hãy làm theo hướng dẫn trong phần Thiết lập để xác nhận rằng Mã ứng dụng và Ứng dụng đang dùng đã được Xác minh và các xác nhận quyền sở hữu bổ sung đã được bật.

Giá trị của xác nhận quyền sở hữu auth_time là một số JSON đại diện cho số giây đã trôi qua kể từ thời điểm bắt đầu của Unix (00:00:00 UTC ngày 1 tháng 1 năm 1970) cho đến thời điểm xác thực người dùng gần nhất.

Giá trị của xác nhận quyền sở hữu amr là một mảng JSON gồm các chuỗi đại diện cho các phương thức xác thực được dùng trong sự kiện đăng nhập vào Tài khoản Google gần nhất.

Đây là ví dụ về Mã thông báo nhận dạng đã giải mã, bao gồm các xác nhận quyền sở hữu auth_timeamr:

{
  "iss": "https://accounts.google.com",
  "azp": "YOUR_CLIENT_ID",
  "aud": "YOUR_CLIENT_ID",
  "sub": "117726431651943698600",
  "email": "alice@example.com",
  "email_verified": true,
  "nonce": "123-456-7890",
  "auth_time": 1748875426,
  "amr": ["mfa", "pwd", "tel"],
  "nbf": 1748880889,
  "name": "Elisa Beckett",
  "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c",
  "given_name": "Elisa",
  "family_name": "Beckett",
  "iat": 1748881189,
  "exp": 1748884789,
  "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1"
}

Mã thông báo nhận dạng cũng chứa xác nhận quyền sở hữu iat (đã phát hành vào), cho biết thời điểm JWT được phát hành. Bằng cách so sánh các xác nhận quyền sở hữu iatauth_time, bạn có thể xác định thời gian đã trôi qua kể từ lần xác thực gần nhất của người dùng so với thời điểm tạo Mã thông báo nhận dạng cụ thể. Ví dụ: nếu iat là 1748881189 và auth_time là 1748875426, thì sự khác biệt là 5763 giây, tương ứng với 1 giờ, 36 phút và 3 giây thời gian đã trôi qua.