将服务帐户的访问权限授予教室中的 google 个帐户
Give access for service account to google accounts in classroom
我想从我的服务器应用程序访问课堂记录。
我已经创建了一个服务帐户,但我无法从我的 google 帐户创建的课堂中获取记录。
我如何获得访问权限?谢谢
创建服务帐户是不够的。您还必须执行域范围的委派并模拟您域中的另一个用户。
向服务帐户授予全域权限的主要目的是让这些帐户能够代表您域中的用户访问数据,否则服务帐户就像另一个帐户一样,它正在尝试从“课堂”访问自己的数据。
因此,当您创建此 服务帐户 并结束模拟您域中的另一个用户时,它将能够访问该用户可以从课堂访问的记录。
至于如何做到这一点,您可能会受益于阅读这份详尽的指南 here。
你可以看到,这样做需要做以下事情:
- 从服务帐户凭据创建一个
Credentials
对象并包括您的操作所需的范围:
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/classroom.courses.readonly', 'https://www.googleapis.com/auth/classroom.announcements']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
- 委派权限并模拟您域中的其他用户。
delegated_credentials = credentials.with_subject('user@example.org')
请注意,您将能够访问该用户可以访问的资源。因此,例如,如果您想访问一些只有课程创建者或域管理员可以访问的资源,您将必须分别模拟课程创建者或管理员。
参考
我想从我的服务器应用程序访问课堂记录。
我已经创建了一个服务帐户,但我无法从我的 google 帐户创建的课堂中获取记录。
我如何获得访问权限?谢谢
创建服务帐户是不够的。您还必须执行域范围的委派并模拟您域中的另一个用户。
向服务帐户授予全域权限的主要目的是让这些帐户能够代表您域中的用户访问数据,否则服务帐户就像另一个帐户一样,它正在尝试从“课堂”访问自己的数据。
因此,当您创建此 服务帐户 并结束模拟您域中的另一个用户时,它将能够访问该用户可以从课堂访问的记录。
至于如何做到这一点,您可能会受益于阅读这份详尽的指南 here。
你可以看到,这样做需要做以下事情:
- 从服务帐户凭据创建一个
Credentials
对象并包括您的操作所需的范围:
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/classroom.courses.readonly', 'https://www.googleapis.com/auth/classroom.announcements']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
- 委派权限并模拟您域中的其他用户。
delegated_credentials = credentials.with_subject('user@example.org')
请注意,您将能够访问该用户可以访问的资源。因此,例如,如果您想访问一些只有课程创建者或域管理员可以访问的资源,您将必须分别模拟课程创建者或管理员。