Quản lý tài khoản người dùng

Directory API cung cấp các phương thức lập trình để tạo, cập nhật và xoá người dùng. Bạn cũng có thể nhận thông tin về từng người dùng hoặc danh sách người dùng đáp ứng các tiêu chí cụ thể. Sau đây là ví dụ về một số thao tác cơ bản của người dùng.

Tạo tài khoản người dùng

Bạn có thể thêm tài khoản người dùng vào bất kỳ miền nào của tài khoản Google Workspace. Trước khi thêm tài khoản người dùng, hãy xác nhận quyền sở hữu miền.

Nếu đã nâng cấp tài khoản Gmail cá nhân lên tài khoản email doanh nghiệp có tên miền của riêng bạn, thì bạn sẽ không thể tạo tài khoản người dùng mới cho đến khi mở khoá các chế độ cài đặt bổ sung của Google Workspace. Để biết thông tin chi tiết, hãy xem bài viết Tài khoản email G Suite Business được cập nhật lên G Suite Basic.

Để tạo tài khoản người dùng bằng một trong các miền của bạn, hãy sử dụng yêu cầu POST sau đây và thêm quyền uỷ quyền được mô tả trong phần Tìm hiểu về việc xác thực và uỷ quyền. Bạn có thể xem các phạm vi hiện có cho API Thư mục trong danh sách phạm vi OAuth 2.0. Đối với các thuộc tính chuỗi truy vấn yêu cầu, hãy xem phương thức users.insert().

POST https://admin.googleapis.com/admin/directory/v1/users

Tất cả yêu cầu tạo đều yêu cầu bạn gửi thông tin cần thiết để thực hiện yêu cầu. Nếu bạn đang sử dụng thư viện ứng dụng, thì thư viện này sẽ chuyển đổi các đối tượng dữ liệu từ ngôn ngữ bạn chọn thành các đối tượng có định dạng dữ liệu JSON.

Yêu cầu JSON

JSON sau đây cho thấy một yêu cầu mẫu để tạo người dùng. Để biết danh sách đầy đủ các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

{
"primaryEmail": "liz@example.com",
"name": {
 "givenName": "Elizabeth",
 "familyName": "Smith"
},
"suspended": false,
"password": "new user password",
"hashFunction": "SHA-1",
"changePasswordAtNextLogin": false,
"ipWhitelisted": false,
"ims": [
 {
  "type": "work",
  "protocol": "gtalk",
  "im": "liz_im@talk.example.com",
  "primary": true
 }
],
"emails": [
 {
  "address": "liz@example.com",
  "type": "home",
  "customType": "",
  "primary": true
 }
],
"addresses": [
 {
  "type": "work",
  "customType": "",
  "streetAddress": "1600 Amphitheatre Parkway",
  "locality": "Mountain View",
  "region": "CA",
  "postalCode": "94043"
 }
],
"externalIds": [
 {
  "value": "12345",
  "type": "custom",
  "customType": "employee"
 }
],
"organizations": [
 {
  "name": "Google Inc.",
  "title": "SWE",
  "primary": true,
  "type": "work",
  "description": "Software engineer"
 }
],
"phones": [
 {
  "value": "+1 nnn nnn nnnn",
  "type": "work"
 }
],
"orgUnitPath": "/corp/engineering",
"includeInGlobalAddressList": true
}

Nếu tốc độ truy vấn cho các yêu cầu tạo quá cao, bạn có thể nhận được phản hồi 503 HTTP từ máy chủ API cho biết rằng bạn đã vượt quá hạn mức. Nếu bạn nhận được những phản hồi này, hãy sử dụng thuật toán thời gian đợi luỹ thừa để thử lại các yêu cầu của bạn.

Sau đây là những điều cần lưu ý về tài khoản mới:

  • Nếu Tài khoản Google đã mua giấy phép thư, thì tài khoản người dùng mới sẽ tự động được chỉ định một hộp thư. Có thể mất vài phút để hoàn tất và kích hoạt bài tập này.
  • Dịch vụ API sẽ tự động bỏ qua việc chỉnh sửa trường chỉ có thể đọc trong yêu cầu, chẳng hạn như isAdmin.
  • Số lượng miền tối đa được phép trong một tài khoản là 600 (1 miền chính + 599 miền bổ sung)
  • Nếu người dùng không được chỉ định cho một đơn vị tổ chức cụ thể khi tạo tài khoản người dùng, thì tài khoản đó sẽ nằm trong đơn vị tổ chức cấp cao nhất. Đơn vị tổ chức của người dùng sẽ xác định những dịch vụ Google Workspace mà người dùng đó có quyền truy cập. Nếu người dùng được chuyển sang một tổ chức mới, thì quyền truy cập của người dùng sẽ thay đổi. Để biết thêm thông tin về cấu trúc tổ chức, hãy xem trung tâm trợ giúp dành cho quản trị viên. Để biết thêm thông tin về cách chuyển người dùng sang một tổ chức khác, hãy xem bài viết Cập nhật người dùng.
  • Tài khoản người dùng mới bắt buộc phải có password. Nếu bạn chỉ định hashFunction, thì mật khẩu phải là khoá băm hợp lệ. Nếu không được chỉ định, mật khẩu phải ở dạng văn bản thô và có từ 8 đến 100 ký tự ASCII. Để biết thêm thông tin, hãy xem Tài liệu tham khảo API.
  • Đối với người dùng sử dụng gói linh hoạt của Google Workspace, việc tạo người dùng bằng API này sẽ ảnh hưởng đến tài chính và sẽ dẫn đến việc tính phí vào tài khoản thanh toán của khách hàng. Để biết thêm thông tin, hãy xem phần Thông tin thanh toán qua API.
  • Một tài khoản Google Workspace có thể bao gồm bất kỳ miền nào của bạn. Trong tài khoản nhiều miền, người dùng trong một miền có thể chia sẻ dịch vụ với người dùng trong các miền tài khoản khác. Để biết thêm thông tin về người dùng trong nhiều miền, hãy xem phần Thông tin về nhiều miền API.
  • Có thể có tài khoản xung đột. Kiểm tra xem người mà bạn định thêm vào đã có Tài khoản Google hay chưa. Sau đó, hãy làm theo các bước để tránh xung đột với các tài khoản đó. Hãy xem bài viết Tìm và khắc phục tài khoản xung đột.
  • Có thể có tài khoản khách truy cập. Nếu người dùng mời những người bên ngoài tổ chức của bạn và không có Tài khoản Google cộng tác trên Drive, thì họ sẽ nhận được tài khoản khách truy cập, theo định dạng tên_người_dùng_của_khách_truy_cập@miền_của_bạn. Nếu bạn thêm một người dùng có cùng tên người dùng với tài khoản khách truy cập, thì tài khoản đó sẽ được chuyển đổi thành tài khoản Google Workspace đầy đủ. Tài khoản này sẽ giữ nguyên quyền đối với tệp trên Drive. Xem bài viết Chia sẻ tài liệu với khách truy cập.

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200. Cùng với mã trạng thái, phản hồi sẽ trả về các thuộc tính cho tài khoản người dùng mới.

Cập nhật tài khoản người dùng

Để cập nhật tài khoản người dùng, hãy sử dụng yêu cầu PUT sau đây và thêm quyền uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey có thể là địa chỉ email chính của người dùng, id người dùng duy nhất hoặc một trong các địa chỉ email đại diện của người dùng.

PUT https://admin.googleapis.com/admin/directory/v1/users/userKey

Cả nội dung yêu cầu và nội dung phản hồi đều chứa một thực thể của User. Tuy nhiên, Directory API hỗ trợ ngữ nghĩa bản vá, vì vậy, bạn chỉ cần gửi các trường đã cập nhật trong yêu cầu của mình.

Yêu cầu mẫu

Trong ví dụ bên dưới, givenName của người dùng là "Elizabeth" khi tài khoản người dùng được tạo và chỉ cung cấp địa chỉ email công việc.

{
  "name": {
    "givenName": "Elizabeth",
    "familyName": "Smith"
   },
  "emails": [
    {
      "address": "liz@example.com",
      "type": "work",
      "primary": true
    }
}

Yêu cầu bên dưới cập nhật givenName từ "Elizabeth" thành "Liz", đồng thời thêm địa chỉ email gia đình. Xin lưu ý rằng cả hai địa chỉ email đều được cung cấp đầy đủ vì trường này là một mảng.

PUT https://admin.googleapis.com/admin/directory/v1/users/liz@example.com

{
  "name": {
    "givenName": "Liz",
   },
  "emails": [
    {
      "address": "liz@example.com",
      "type": "work",
      "primary": true
    },
    {
      "address": "liz@home.com",
      "type": "home"
    }
  ]
}

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200 và tài nguyên User có các trường đã cập nhật.

Hãy lưu ý những điều sau khi cập nhật tên tài khoản của người dùng:

  • Việc đổi tên tài khoản người dùng sẽ thay đổi địa chỉ email chính của người dùng và miền được dùng khi truy xuất thông tin của người dùng này. Trước khi đổi tên người dùng, bạn nên đăng xuất người dùng khỏi tất cả các phiên trình duyệt và dịch vụ.
  • Quá trình đổi tên tài khoản người dùng có thể mất tối đa 10 phút để truyền tải trên tất cả các dịch vụ.
  • Khi bạn đổi tên người dùng, tên người dùng cũ sẽ được giữ lại dưới dạng tên đại diện để đảm bảo việc gửi thư liên tục trong trường hợp có chế độ cài đặt chuyển tiếp email và không được dùng làm tên người dùng mới.
  • Nhìn chung, bạn cũng không nên sử dụng địa chỉ email của người dùng làm khoá cho dữ liệu cố định vì địa chỉ email có thể thay đổi.
  • Để biết danh sách đầy đủ các hiệu ứng của việc đổi tên người dùng trên các ứng dụng của Google Workspace, hãy xem Trung tâm trợ giúp dành cho quản trị viên.

Đặt người dùng làm quản trị viên

Để chuyển người dùng thành quản trị viên cấp cao, hãy sử dụng yêu cầu POST sau đây và thêm quyền uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey có thể là địa chỉ email chính của người dùng, id người dùng duy nhất hoặc một trong các địa chỉ email đại diện của người dùng. Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API. Để biết thêm thông tin về quản trị viên cấp cao, hãy xem trung tâm trợ giúp dành cho quản trị viên.

POST https://admin.googleapis.com/admin/directory/v1/users/userKey/makeAdmin

Yêu cầu JSON

Trong ví dụ này, người dùng có userKey là liz@example.com đã trở thành quản trị viên cấp cao:

POST https://admin.googleapis.com/admin/directory/v1/users/liz@example.com/makeAdmin
{
 "status": true
}

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200.

Quản lý mối quan hệ của người dùng

Directory API sử dụng trường relations để xác định các loại mối quan hệ khác nhau giữa người dùng. Trong môi trường doanh nghiệp, mọi người thường sử dụng trường này cho mối quan hệ giữa người quản lý và nhân viên cũng như trợ lý, nhưng trường này cũng hỗ trợ nhiều loại mối quan hệ khác. Mối quan hệ này sẽ hiển thị trong thẻ "Người liên quan" của người dùng trong mọi ứng dụng Google Workspace hỗ trợ thẻ này. Để biết ví dụ về vị trí hiển thị thẻ, hãy xem phần Thêm thông tin vào hồ sơ Danh bạ của người dùng.

Tạo mối quan hệ giữa người dùng

Bạn chỉ có thể xác định mối quan hệ theo một hướng, bắt đầu từ người dùng "sở hữu", có bản ghi bao gồm trường relations. type mô tả mối quan hệ của người khác với người dùng sở hữu. Ví dụ: trong mối quan hệ người quản lý – nhân viên, nhân viên là người dùng sở hữu và bạn thêm trường relations vào tài khoản của họ với loại manager. Đối với các loại được phép, hãy xem tài liệu tham khảo đối tượng User.

Thiết lập mối quan hệ bằng cách tạo hoặc cập nhật người dùng sở hữu bằng nội dung yêu cầu JSON bao gồm trường relations. Bạn có thể tạo nhiều mối quan hệ trong một yêu cầu.

{
  "relations": [
    {
      "value": "EMAIL_ADDRESS_RELATION_1",
      "type": "manager"
    },
    {
      "value": "EMAIL_ADDRESS_RELATION_2",
      "type": "dotted_line_manager"
    }
  ]
}

Cập nhật hoặc xoá mối quan hệ

Bạn chỉ có thể cập nhật toàn bộ trường relations – bạn không thể thay đổi loại mối quan hệ hoặc xoá từng người được liệt kê. Trong ví dụ trên, để xoá mối quan hệ người quản lý hiện có và đặt người quản lý có đường kẻ chấm thành người quản lý của người dùng sở hữu, hãy cập nhật tài khoản của người dùng sở hữu bằng tất cả các giá trị của trường mà bạn muốn.

{
  "relations": [
    {
      "value": "EMAIL_ADDRESS_RELATION_2",
      "type": "manager"
    }
  ]
}

Để xoá tất cả mối quan hệ của người dùng sở hữu, hãy đặt relations thành trống:

{
  "relations": []
}

Truy xuất người dùng

Để truy xuất người dùng, hãy sử dụng yêu cầu GET sau đây và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey có thể là địa chỉ email chính của người dùng, id người dùng duy nhất hoặc một trong các địa chỉ email đại diện của người dùng. Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

GET https://admin.googleapis.com/admin/directory/v1/users/userKey

Ví dụ này trả về các thuộc tính tài khoản người dùng cho người dùng có địa chỉ email chính hoặc địa chỉ email đại diện là liz@vidu.com:

GET https://admin.googleapis.com/admin/directory/v1/users/liz@example.com

Nội dung phản hồi JSON

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200. Cùng với mã trạng thái, phản hồi sẽ trả về các thuộc tính cho tài khoản người dùng.

{
 "kind": "directory#user",
 "id": "the unique user id",
 "primaryEmail": "liz@example.com",
 "name": {
  "givenName": "Liz",
  "familyName": "Smith",
  "fullName": "Liz Smith"
 },
 "isAdmin": true,
 "isDelegatedAdmin": false,
 "lastLoginTime": "2013-02-05T10:30:03.325Z",
 "creationTime": "2010-04-05T17:30:04.325Z",
 "agreedToTerms": true,
 "hashFunction": "SHA-1",
 "suspended": false,
 "changePasswordAtNextLogin": false,
 "ipWhitelisted": false,
 "ims": [
  {
   "type": "work",
   "protocol": "gtalk",
   "im": "lizim@talk.example.com",
   "primary": true
  }
 ],
 "emails": [
  {
   "address": "liz@example.com",
   "type": "home",
   "customType": "",
   "primary": true
  }
 ],
 "addresses": [
  {
   "type": "work",
   "customType": "",
   "streetAddress": "1600 Amphitheatre Parkway",
   "locality": "Mountain View",
   "region": "CA",
   "postalCode": "94043"
  }
 ],
 "externalIds": [
  {
   "value": "employee number",
   "type": "custom",
   "customType": "office"
  }
 ],
 "organizations": [
  {
   "name": "Google Inc.",
   "title": "SWE",
   "primary": true,
   "customType": "",
   "description": "Software engineer"
  }
 ],
 "phones": [
  {
   "value": "+1 nnn nnn nnnn",
   "type": "work"
  }
 ],
 "aliases": [
  "lizsmith@example.com",
  "lsmith@example.com"
 ],
 "nonEditableAliases": [
  "liz@test.com"
 ],
 "customerId": "C03az79cb",
 "orgUnitPath": "corp/engineering",
 "isMailboxSetup": true,
 "includeInGlobalAddressList": true
}

Truy xuất tất cả người dùng trong một miền

Để truy xuất tất cả người dùng trong cùng một miền, hãy sử dụng yêu cầu GET sau đây và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. Để dễ đọc, ví dụ này sử dụng các dòng trả về:

GET https://admin.googleapis.com/admin/directory/v1/users
?domain=primary domain name&pageToken=token for next results page
&maxResults=max number of results per page
&orderBy=email, givenName, or familyName
&sortOrder=ascending or descending
&query=email, givenName, or familyName:the query's value*

Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

Nội dung phản hồi JSON

Trong ví dụ này, tất cả người dùng trong miền example.com sẽ được trả về với tối đa 2 miền người dùng trên mỗi trang phản hồi. Có một nextPageToken cho danh sách tiếp theo của người dùng trong phản hồi này. Theo mặc định, hệ thống sẽ trả về danh sách 100 người dùng theo thứ tự bảng chữ cái của địa chỉ email của người dùng:

GET https://admin.googleapis.com/admin/directory/v1/users?domain=example.com&maxResults=2

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200. Cùng với mã trạng thái, phản hồi sẽ trả về 2 tài khoản người dùng trong miền example.com (maxResults=2):

{
 "kind": "directory#users",
 "users": [
  {
   "kind": "directory#user",
   "id": "the unique user id",
   "primaryEmail": "liz@example.com",
   "name": {
    "givenName": "Liz",
    "familyName": "Smith",
    "fullName": "Liz Smith"
   },
   "isAdmin": true,
   "isDelegatedAdmin": false,
   "lastLoginTime": "2013-02-05T10:30:03.325Z",
   "creationTime": "2010-04-05T17:30:04.325Z",
   "agreedToTerms": true,
   "hashFunction": "SHA-1",
   "suspended": false,
   "changePasswordAtNextLogin": false,
   "ipWhitelisted": false,
   "ims": [
    {
     "type": "work",
     "protocol": "gtalk",
     "im": "lizim@talk.example.com",
     "primary": true
    }
   ],
   "emails": [
    {
     "address": "liz@example.com",
     "type": "work",
     "customType": "",
     "primary": true
    }
   ],
   "addresses": [
    {
     "type": "work",
     "customType": "",
     "streetAddress": "1600 Amphitheatre Parkway",
     "locality": "Mountain View",
     "region": "CA",
     "postalCode": "94043"
    }
   ],
   "externalIds": [
    {
     "value": "employee number",
     "type": "custom",
     "customType": "office"
    }
   ],
   "organizations": [
    {
     "name": "Google Inc.",
     "title": "SWE",
     "primary": true,
     "customType": "",
     "description": "Software engineer"
    }
   ],
   "phones": [
    {
     "value": "+1 nnn nnn nnnn",
     "type": "work"
    }
   ],
   "aliases": [
    "lizsmith@example.com",
    "lsmith@example.com"
   ],
   "nonEditableAliases": [
    "liz@test.com"
   ],
   "customerId": "C03az79cb",
   "orgUnitPath": "corp/engineering",
   "isMailboxSetup": true,
   "includeInGlobalAddressList": true
  },
  {
   "kind": "directory#user",
   "id": "user unique ID",
   "primaryEmail": "admin2@example.com",
   "name": {
    "givenName": "admin",
    "familyName": "two",
    "fullName": "admin two"
   },
   "isAdmin": true,
   "isDelegatedAdmin": true,
   "lastLoginTime": "2013-02-05T10:30:03.325Z",
   "creationTime": "2010-04-05T17:30:04.325Z",
   "agreedToTerms": true,
   "hashFunction": "SHA-1",
   "suspended": true,
   "suspensionReason": "ADMIN",
   "changePasswordAtNextLogin": false,
   "ipWhitelisted": false,
   "emails": [
    {
     "address": "admin2@example.com",
     "type": "work",
     "customType": "",
     "primary": true
    }
   ],
   "externalIds": [
    {
     "value": "contractor license number",
     "type": "custom",
     "customType": "work"
    }
   ],
   "aliases": [
    "second_admin@example.com"
   ],
   "nonEditableAliases": [
    "admin@test.com"
   ],
   "customerId": "C03az79cb",
   "orgUnitPath": "corp/engineering",
   "isMailboxSetup": true,
   "includeInGlobalAddressList": true
  }
 ],
 "nextPageToken": "next page token"
}

Truy xuất tất cả người dùng tài khoản

Để truy xuất tất cả người dùng trong một tài khoản có thể bao gồm nhiều miền, hãy sử dụng yêu cầu GET sau đây và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. Để dễ đọc, ví dụ này sử dụng các dòng trả về:

GET https://admin.googleapis.com/admin/directory/v1/users
?customer=my_customer or customerId&pageToken=token for next results page
&maxResults=max number of results per page
&orderBy=email, givenName, or familyName
&sortOrder=ascending or descending
&query=user attributes
  • Chuỗi truy vấn customer là giá trị my_customer hoặc customerId.
  • Sử dụng chuỗi my_customer để biểu thị customerId của tài khoản.
  • Là quản trị viên của đại lý, hãy sử dụng customerId của khách hàng đã bán lại. Đối với customerId, hãy sử dụng tên miền chính của tài khoản trong yêu cầu của thao tác Truy xuất tất cả người dùng trong một miền. Phản hồi thu được có giá trị customerId.
  • Chuỗi truy vấn orderBy (không bắt buộc) xác định xem danh sách được sắp xếp theo địa chỉ email chính, họ hoặc tên của người dùng hay không. Khi sử dụng orderBy, bạn cũng có thể sử dụng chuỗi truy vấn sortOrder để liệt kê kết quả theo thứ tự tăng dần hoặc giảm dần.
  • Chuỗi truy vấn query không bắt buộc cho phép tìm kiếm trên nhiều trường trong hồ sơ người dùng, bao gồm cả trường cốt lõi và trường tuỳ chỉnh. Hãy xem phần Tìm người dùng để biết ví dụ.

Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

Trong ví dụ này, quản trị viên tài khoản yêu cầu trả về tất cả người dùng trong tài khoản, mỗi trang phản hồi trả về một mục nhập người dùng. nextPageToken chuyển đến trang kết quả tiếp theo:

GET https://admin.googleapis.com/admin/directory/v1/users?customer=my_customer&maxResults=1

Trong ví dụ này, quản trị viên của đại lý đang yêu cầu tất cả người dùng trong một tài khoản được bán lại có giá trị customerIdC03az79cb.

GET https://admin.googleapis.com/admin/directory/v1/users?customer=C03az79cb&maxResults=1

Nội dung phản hồi JSON

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200. Cùng với mã trạng thái, phản hồi sẽ trả về tất cả người dùng trong tài khoản này:

{
 "kind": "directory#users",
 "users": [
  {
   "kind": "directory#user",
   "id": "the unique user id",
   "username": "admin2@example.com",
   "name": {
    "givenName": "admin",
    "familyName": "two",
    "fullName": "admin two"
   },
   "isAdmin": true,
   "isDelegatedAdmin": true,
   "lastLoginTime": "2013-02-05T10:30:03.325Z",
   "creationTime": "2010-04-05T17:30:04.325Z",
   "agreedToTerms": true,
   "hashFunction": "SHA-1",
   "suspended": false,
   "changePasswordAtNextLogin": false,
   "ipWhitelisted": false,
   "emails": [
    {
     "address": "admin2@example.com",
     "type": "work",
     "customType": "",
     "primary": true
    }
   ],
   "externalIds": [
    {
     "value": "employee number",
     "type": "custom",
     "customType": "office"
    }
   ],
   "aliases": [
     "second_admin@example.com"
   ],
   "nonEditableAliases": [
     "another_admin@test.com"
   ],
   "customerId": "C03az79cb",
   "orgUnitPath": "/",
   "isMailboxSetup": true,
   "includeInGlobalAddressList": true
  },
  {
   "kind": "directory#user",
   "id": "the unique user id",
   "username": "liz@example.com",
   "name": {
    "givenName": "Elizabeth",
    "familyName": "Smith",
    "fullName": "Elizabeth Smith"
   },
   "isAdmin": false,
   "isDelegatedAdmin": false,
   "lastLoginTime": "1336509883546",
   "creationTime": "1404802800000",
   "agreedToTerms": false,
   "hashFunction": "SHA-1",
   "suspended": false,
   "changePasswordAtNextLogin": false,
   "ipWhitelisted": false,
   "emails": [
    {
     "address": "liz@example.com",
     "type": "home",
     "customType": "",
     "primary": true
    }
   ],
   "externalIds": [
    {
     "value": "employee number",
     "type": "custom",
     "customType": "bank"
    }
   ],
   "relations": [
    {
     "value": "liz",
     "type": "friend",
     "customType": ""
    }
   ],
   "aliases": [
    "lizsmith@example.com",
    "lsmith@example.com"
   ],
   "nonEditableAliases": [
    "liz@test.com"
   ],
   "customerId": "C03az79cb",
   "orgUnitPath": "/",
   "isMailboxSetup": true,
   "includeInGlobalAddressList": true
  },
  {
   "kind": "directory#user",
   "id": "the unique user id",
   "username": "test3@example.com",
   "name": {
    "givenName": "Tester",
    "familyName": "Three",
    "fullName": "Tester Three"
   },
   "isAdmin": false,
   "isDelegatedAdmin": false,
   "lastLoginTime": "1336509883546",
   "creationTime": "1404802800000",
   "agreedToTerms": true,
   "hashFunction": "SHA-1",
   "suspended": false,
   "changePasswordAtNextLogin": false,
   "ipWhitelisted": false,
   "emails": [
    {
     "address": "test@example.com",
     "type": "work",
     "customType": "",
     "primary": true
    }
   ],
   "externalIds": [
    {
     "value": "employee number",
     "type": "custom",
     "customType": "office"
    }
   ],
   "aliases": [
    "tester3@example.com"
   ],
   "nonEditableAliases": [
    "third@test.com"
   ],
   "customerId": "C03az79cb",
   "orgUnitPath": "/",
   "isMailboxSetup": true,
   "includeInGlobalAddressList": true
  },
  {
   "kind": "directory#user",
   "id": "the unique user id",
   "username": "work_admin@example.com",
   "name": {
    "givenName": "Admin",
    "familyName": "Work",
    "fullName": "Admin Work"
   },
   "isAdmin": true,
   "isDelegatedAdmin": true,
   "lastLoginTime": "1336509883546",
   "creationTime": "1404802800000",
   "agreedToTerms": true,
   "hashFunction": "SHA-1",
   "suspended": false,
   "changePasswordAtNextLogin": false,
   "ipWhitelisted": false,
   "emails": [
    {
     "address": "work_admin@example.com",
     "type": "work",
     "customType": "",
     "primary": true
    }
   ],
   "externalIds": [
    {
     "value": "employee number",
     "type": "custom",
     "customType": "office"
    }
   ],
   "aliases": [
    "my_alias@example.com"
   ],
   "nonEditableAliases": [
    "other_alias@test.com"
   ],
   "customerId": "C03az79cb",
   "orgUnitPath": "/",
   "isMailboxSetup": true,
   "includeInGlobalAddressList": true
  }
 ],
 "nextPageToken": "NNNNN"
}

Truy xuất người dùng đã xoá gần đây

Để truy xuất tất cả người dùng đã bị xoá trong vòng 20 ngày qua khỏi một tài khoản hoặc khỏi một trong các miền của tài khoản, hãy sử dụng các yêu cầu GET sau và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. Để huỷ xoá người dùng, hãy xem bài viết Huỷ xoá người dùng.

Để truy xuất những người dùng đã bị xoá trong vòng 20 ngày qua khỏi miền chính hoặc miền con của tài khoản, hãy sử dụng yêu cầu GET sau. Chuỗi truy vấn domain là tên miền chính của miền. Đối với các thuộc tính yêu cầu và phản hồi của người dùng, hãy xem Tài liệu tham khảo API. Để dễ đọc, ví dụ này sử dụng các dòng trả về:

GET https://admin.googleapis.com/admin/directory/v1/users
?domain=primary domain name&pageToken=token for next results page
&maxResults=max number of results per page
&showDeleted=true
Nếu một tài khoản có nhiều miền, bạn có thể truy xuất người dùng đã bị xoá trong vòng 20 ngày qua trên toàn bộ tài khoản bằng cách sử dụng yêu cầu GET sau đây. Để dễ đọc, ví dụ này sử dụng các dòng trả về:
GET https://admin.googleapis.com/admin/directory/v1/users
?customer=my_customer or customerId&pageToken=token for next results page
&maxResults=max number of results per page&showDeleted=true
  • Chuỗi truy vấn customer là giá trị my_customer hoặc customerId.
  • Là quản trị viên tài khoản, hãy sử dụng chuỗi my_customer để biểu thị customerId của tài khoản.
  • Là quản trị viên của đại lý, hãy sử dụng customerId của khách hàng đã bán lại. Đối với customerId, hãy sử dụng tên miền chính của tài khoản trong yêu cầu của thao tác Truy xuất tất cả người dùng trong một miền. Phản hồi thu được có giá trị customerId.

Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

Trong ví dụ này, quản trị viên tài khoản đang yêu cầu tất cả người dùng đã xoá trong tài khoản:

GET https://admin.googleapis.com/admin/directory/v1/users?customer=my_customer&showDeleted=true

Nội dung phản hồi JSON

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200. Cùng với mã trạng thái, phản hồi sẽ trả về tất cả người dùng tài khoản đã bị xoá trong vòng 20 ngày qua:

{
 "kind": "directory#users",
 "users": [
  {
   "kind": "directory#user",
   "id": "the unique user id",
   "primaryEmail": "user1@example.com"
  },
  {
   "kind": "directory#user",
   "id": "the unique user id",
   "primaryEmail": "user3@example.com"
  }
 ],
 "nextPageToken": "token for next page of deleted users"
}

Truy xuất ảnh của người dùng

API này truy xuất một hình thu nhỏ của ảnh, tức là ảnh hồ sơ mới nhất trên Google. Để truy xuất ảnh mới nhất của người dùng, hãy sử dụng yêu cầu GET sau đây và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey có thể là địa chỉ email chính của người dùng, id của người dùng hoặc bất kỳ email đại diện nào của người dùng. Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

GET https://admin.googleapis.com/admin/directory/v1/users/userKey/photos/thumbnail

Trong ví dụ này, hệ thống sẽ trả về ảnh mới nhất của liz@example.com:

GET https://admin.googleapis.com/admin/directory/v1/users/liz@example.com/photos/thumbnail

Phản hồi JSON

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200.

{
 "kind": "directory#user#photo",
 "id": "the unique user id",
 "primaryEmail": "liz@example.com",
 "mimeType": "the photo mime type",
 "height": "the photo height in pixels",
 "width": "the photo width in pixels",
 "photoData": "web safe base64 encoded photo data"
}

Phương thức mã hoá base64 an toàn cho web của API đối với ảnh tương tự như RFC 4648 "base64url". Điều này có nghĩa là:

  • Ký tự gạch chéo (/) được thay thế bằng ký tự dấu gạch dưới (_).
  • Ký tự dấu cộng (+) được thay thế bằng ký tự dấu gạch nối (-).
  • Ký tự dấu bằng (=) được thay thế bằng dấu hoa thị (*).
  • Để tạo khoảng đệm, ký tự dấu chấm (.) được sử dụng thay vì định nghĩa baseURL RFC-4648 sử dụng dấu bằng (=) để tạo khoảng đệm. Việc này được thực hiện để đơn giản hoá việc phân tích cú pháp URL.
  • Bất kể kích thước của ảnh được tải lên là bao nhiêu, API sẽ giảm kích thước ảnh theo tỷ lệ thành 96x96 pixel.

Nếu bạn cần tạo các đường liên kết tương thích từ JavaScript, Thư viện Google Closure sẽ bao gồm các hàm mã hoá và giải mã Base64 được phát hành theo giấy phép Apache.

Truy xuất người dùng với vai trò không phải là quản trị viên

Mặc dù chỉ quản trị viên mới có thể sửa đổi tài khoản người dùng, nhưng mọi người dùng trên miền đều có thể đọc hồ sơ người dùng. Người dùng không phải quản trị viên có thể tạo yêu cầu users.get hoặc users.list với thông số viewType bằng domain_public để truy xuất hồ sơ công khai của người dùng. Phạm vi https://www.googleapis.com/auth/admin.directory.user.readonly là lý tưởng cho trường hợp sử dụng này.

Chế độ xem domain_public cho phép người dùng không phải quản trị viên truy cập vào một nhóm các trường cốt lõi tiêu chuẩn. Đối với trường tuỳ chỉnh, bạn có thể chọn trường đó ở chế độ công khai hay riêng tư khi xác định giản đồ.

Cập nhật ảnh của người dùng

Để cập nhật ảnh của người dùng, hãy sử dụng yêu cầu PUT sau đây và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey có thể là địa chỉ email chính của người dùng, id của người dùng hoặc bất kỳ email nào của bí danh người dùng. Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

PUT https://admin.googleapis.com/admin/directory/v1/users/userKey/photos/thumbnail

Trong ví dụ này, ảnh của liz@example.com được cập nhật:

PUT https://admin.googleapis.com/admin/directory/v1/users/liz@example.com/photos/thumbnail
{
"photoData": "web safe base64 encoded photo data"
}

Khi cập nhật ảnh, API sẽ bỏ qua heightwidth.

Phản hồi JSON

Phản hồi thành công sẽ trả về mã trạng thái HTTP 200.

{
 "kind": "directory#user#photo",
 "id": "the unique user id",
 "primaryEmail": "liz@example.com",
 "mimeType": "the photo mime type",
 "height": "the photo height in pixels",
 "width": "the photo width in pixels",
 "photoData": "web safe base64 encoded photo data"
}

Xoá ảnh của người dùng

Để xoá ảnh của người dùng, hãy sử dụng yêu cầu DELETE sau đây và thêm quyền uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey có thể là địa chỉ email chính của người dùng, id của người dùng hoặc bất kỳ email nào của bí danh người dùng. Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

DELETE https://admin.googleapis.com/admin/directory/v1/users/userKey/photos/thumbnail

Sau khi bị xoá, ảnh của người dùng sẽ không xuất hiện. Bất cứ khi nào cần ảnh của người dùng, một hình dáng sẽ xuất hiện.

Xoá tài khoản người dùng

Để xoá tài khoản người dùng, hãy sử dụng yêu cầu DELETE sau đây và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey có thể là địa chỉ email chính của người dùng, id người dùng duy nhất hoặc một trong các địa chỉ email đại diện của người dùng. Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

DELETE https://admin.googleapis.com/admin/directory/v1/users/userKey

Trong ví dụ này, tài khoản người dùng liz@example.com sẽ bị xoá:

DELETE https://admin.googleapis.com/admin/directory/v1/users/liz@example.com

Phản hồi thành công chỉ trả về mã trạng thái HTTP 200.

Những điều quan trọng cần cân nhắc trước khi xoá người dùng:

Huỷ xoá tài khoản người dùng

Người dùng đã bị xoá trong 20 ngày qua phải đáp ứng một số điều kiện thì tài khoản của người dùng mới có thể được khôi phục.

Để huỷ xoá tài khoản người dùng, hãy sử dụng yêu cầu POST sau đây và thêm thông tin uỷ quyền được mô tả trong phần Uỷ quyền yêu cầu. userKey là người dùng riêng biệt id được tìm thấy trong phản hồi của thao tác Truy xuất người dùng đã bị xoá trong vòng 20 ngày qua. Bạn không thể sử dụng địa chỉ email chính của người dùng hoặc một trong các địa chỉ email đại diện của người dùng trong userKey cho thao tác này. Đối với các thuộc tính yêu cầu và phản hồi, hãy xem Tài liệu tham khảo API.

POST https://admin.googleapis.com/admin/directory/v1/users/userKey/undelete

Trong ví dụ này, người dùng liz@example.com sẽ được huỷ xoá. Tất cả tài sản tài khoản trước đây của người dùng này đều được khôi phục:

POST https://admin.googleapis.com/admin/directory/v1/users/12309329403209438205/undelete

Phản hồi thành công chỉ trả về mã trạng thái HTTP 204. Để xem tài khoản của người dùng chưa bị xoá, hãy sử dụng thao tác Truy xuất người dùng.