使用 API 密钥对 Google 目录进行身份验证
Authentication for Google Directory using API key
我正在尝试编写一个脚本来添加 G Suite 帐户,但我不想在每次提交表单时都重定向到 Google 进行授权。有没有办法在脚本中授权?我尝试使用 API 密钥进行授权,但得到的是 401 Error - Login Required
使用 oAuth 并被重定向到 Google 有效:
from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
# If modifying these scopes, delete the file token.json.
SCOPES = 'https://www.googleapis.com/auth/admin.directory.user'
def main():
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('creds.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('admin', 'directory_v1', http=creds.authorize(Http()))
print('Adding user...')
#create a user
service.users().insert(body={
"name": {
"givenName": "John",
"fullName": "John Smith",
"familyName": "Smith",
},
"password": "password",
"primaryEmail": "testuser@domain.com",
"changePasswordAtNextLogin": True,
}).execute()
if __name__ == '__main__':
main()
使用我的 API 键 returns a 401 Error
API_KEY = 'key'
def main():
service = build('admin', 'directory_v1', developerKey=API_KEY)
print('Adding user...')
#create a user
service.users().insert(body={
"name": {
"givenName": "John",
"fullName": "John Smith",
"familyName": "Smith",
},
"password": "password",
"primaryEmail": "testuser@domain.com",
"changePasswordAtNextLogin": True,
}).execute()
if __name__ == '__main__':
main()
您首先需要了解的是私有数据和 public 数据之间的区别。私有数据是用户拥有的数据,需要您有用户权限才能访问。 Public 数据不属于任何人。您可以使用 api 密钥访问 public 数据,但不能访问私人数据。
如果你检查 Users: insert 你会注意到它说。
Authorization
This request requires authorization with the following scope (read more about authentication and authorization).
所以这是一种需要身份验证的方法。您有两个选项 Oauth2 和请求用户访问权限或使用服务帐户。服务帐户就像一个虚拟用户,这个虚拟用户通过 domain wide delication 被授予访问权限,它通常用于服务器到服务器的通信,在没有用户验证代码的情况下。我建议您考虑进行设置。
我正在尝试编写一个脚本来添加 G Suite 帐户,但我不想在每次提交表单时都重定向到 Google 进行授权。有没有办法在脚本中授权?我尝试使用 API 密钥进行授权,但得到的是 401 Error - Login Required
使用 oAuth 并被重定向到 Google 有效:
from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
# If modifying these scopes, delete the file token.json.
SCOPES = 'https://www.googleapis.com/auth/admin.directory.user'
def main():
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('creds.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('admin', 'directory_v1', http=creds.authorize(Http()))
print('Adding user...')
#create a user
service.users().insert(body={
"name": {
"givenName": "John",
"fullName": "John Smith",
"familyName": "Smith",
},
"password": "password",
"primaryEmail": "testuser@domain.com",
"changePasswordAtNextLogin": True,
}).execute()
if __name__ == '__main__':
main()
使用我的 API 键 returns a 401 Error
API_KEY = 'key'
def main():
service = build('admin', 'directory_v1', developerKey=API_KEY)
print('Adding user...')
#create a user
service.users().insert(body={
"name": {
"givenName": "John",
"fullName": "John Smith",
"familyName": "Smith",
},
"password": "password",
"primaryEmail": "testuser@domain.com",
"changePasswordAtNextLogin": True,
}).execute()
if __name__ == '__main__':
main()
您首先需要了解的是私有数据和 public 数据之间的区别。私有数据是用户拥有的数据,需要您有用户权限才能访问。 Public 数据不属于任何人。您可以使用 api 密钥访问 public 数据,但不能访问私人数据。
如果你检查 Users: insert 你会注意到它说。
Authorization This request requires authorization with the following scope (read more about authentication and authorization).
所以这是一种需要身份验证的方法。您有两个选项 Oauth2 和请求用户访问权限或使用服务帐户。服务帐户就像一个虚拟用户,这个虚拟用户通过 domain wide delication 被授予访问权限,它通常用于服务器到服务器的通信,在没有用户验证代码的情况下。我建议您考虑进行设置。