我们必须尽快通过Google Directory API获取有关用户和群组的最新动态.
对于用户,我们现在在第一次同步的users.list,groups.list和members.list的响应中保存"Etag" .然后每隔几秒检查一次etag,当它发生变化时,我们将调用分页呼叫users.list,groups.list或者members.list再次获取更新.
它适用于小型域名,但对于大型域名来说这将是一个问题(用户数量可能为60000,组的数量可能为10000,每组中有1000名成员).当单个用户或组发生一点变化时,etag将发生变化.所以我们必须一次又一次地调用分页调用.
所以问题是:是否有更好的方法可以让小变更更有效率?
程序
我要:
1.从Google Directory API获取一个OrgUnit
2.阅读OrgUnit并收集所需的数据
3.尝试删除我刚刚收集的OrgUnit.
这会以某种方式导致404 [Not Found]错误
请记住我正在使用的DirectoryService类正常工作.
我修改了这个例子中的代码,使其易于阅读,例如:不包括异常处理等.
API
using Google.Apis.Admin.Directory.directory_v1
Run Code Online (Sandbox Code Playgroud)
1.从Google Directory API获取OrgUnit
DirectoryService directoryService = ServiceInitializers.InitializeDirectoryService();
OrgUnit oUnit = directoryService.Orgunits.List(Settings.customerId).Execute().OrganizationUnits.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
2.读取OrgUnit并收集所需的数据
string orgUnitPath = oUnit.OrgUnitPath;
Run Code Online (Sandbox Code Playgroud)
3.尝试删除我刚刚收集的OrgUnit
var orgUnitDeleteResult = directoryService.Orgunits.Delete(Settings.customerId, orgUnitPath).Execute();
Run Code Online (Sandbox Code Playgroud)
例外
GoogleApiException未处理Google.Apis.dll中
出现未处理的"Google.GoogleApiException"类型例外情况
其他信息:Google.Apis.Requests.RequestError未找到组织单位[404]
我正在使用 google 管理目录 API 使用以下 API https://www.googleapis.com/admin/directory/v1/users获取所有帐户公共信息
当我使用g suite域帐户 登录时,这里是此 api链接的链接,假设 abc@somedomain.com 使用非管理用户,此 api 工作正常并获取数组中所有帐户的数据,但是当我通过登录调用此 API 时管理员它给了我以下错误/
权限不足:请求的身份验证范围不足
为什么会发生这种情况我对两个用户使用相同的身份验证和 API 密钥
我的代码在这里
const token =localStorage.getItem('token')
fetch(`https://www.googleapis.com/admin/directory/v1/users?
domain=${domain.url}&viewType=domain_public&key=${apiKey.key}`
,{ headers: {
'authorization': 'Bearer '+token
},})
.then(response => response.json())
.then(data => this.setState({ users:data.users }));
Run Code Online (Sandbox Code Playgroud)
令牌来自此模块npm React google 登录google 登录按钮
我正在考虑使用OAuth 2.0 服务帐户和域范围授权将我们的服务与Google Apps集成.一个特定的用例是:
当Google Apps客户注册我们的服务时,请使用客户现有的组织结构或资源(组织,组,设备,用户,文件夹,文件等)预先配置我们的服务.
当客户的Google Apps资源发生变化时,请将适用的更改与我们的服务同步.
我发现在使用服务帐户时,我需要为我要查询的域指定授权超级用户的电子邮件地址,如下所示:
var cred = new ServiceAccountCredential( new ServiceAccountCredential.Initializer( "{SERVICEACCOUNTEMAIL}" )
{
Scopes = new[]
{
DirectoryService.Scope.AdminDirectoryOrgunitReadonly
},
User = "{USERTOIMPERSONATE@customergadomain.com}"
}.FromCertificate( x509cert ) );
Run Code Online (Sandbox Code Playgroud)
如果我想要例如
理想情况下,我不希望将我们服务器上的自动后台流程与特定的Google Apps用户结合使用,以使资源与域管理员或用户可能在Google Apps端产生的更改保持同步.
我不想指定用户.所以我的主要问题是,我正在使用正确的授权模型来实现我的目标吗?
我的第二个问题不仅仅是一个问题.当委派已授予对域资源的访问权限时,要求模拟使用Admin API的目的是什么?与普通的OAuth 2.0授权工作流程相比,我不必代表用户进行授权,我只需要指定她的电子邮件地址即可.我是否错过了服务帐户/委托访问模型的意图?
我正在批量请求将成员添加到组.为此,我使用OAuth2.0并获取类类型Credential的对象.执行时,batch.execute()抛出一个
java.net.SocketTimeoutException : Read timed out
Run Code Online (Sandbox Code Playgroud)
要更改超时限制,这是我找到的解决方案: GoogleApps客户端仅提供SocketTimeOutException
但我无法更改我正在创建的Credential对象的超时.
Credential credential = new AuthorizationCodeInstalledApp(
flow, new LocalServerReceiver()).authorize("user");
Run Code Online (Sandbox Code Playgroud)
注意:凭据实现HttpRequestInitializer.
提前致谢!
java google-api-java-client google-admin-sdk google-directory-api
我正在尝试使用Google Directory API编写一个为数千名用户创建邮件帐户的应用程序.逐个创建它们有效,但速度极慢.我尝试使用批处理请求,假设一次最多支持1000个请求.但是,只有大约50个用户成功创建,其余请求抛出403错误.如果我将批量大小更改为40,则在第一批之后,许多请求会因5xx错误而失败.
如果批量请求仍然受到相同速率限制的限制,那么似乎毫无价值,因为我可以以这么慢的速率单独发送这些请求.有没有更好的方法来做到这一点还是我应该做的其他事情呢?
我已向Google Directions API提出请求,并收到了以下JSON说明:
在底部,我得到编码的折线数据:
ecduHxqrE|RfS{SlW_w@zDc{@ig@cVlK}z@j}Aog@z{AuGbdDibAfkGaBpcG}~@vrGy_AhhCoi@feB{bBxu@kxAsSus@|eAcLdyBci@dcByi@ly@`GrgC_S~d@e\\wBugA_uBwuAusAoaCidAs~Dq{DiaAu`CuwAweAevBi@}dDwgCsrAwfBuqFkmBwzEu~DenAa|Bi_BcuDmrAghF_{B_hGa{@chAocAl[m_@pXwk@{z@}Zc~A_hAmn@mdAinBg_@eD{o@moA{_@kz@sn@ca@oWmcCoQsUue@`De{@yH{oA~i@meAliA}wAa]ij@qg@}o@w_@yVrT_k@|Y{oCi`@e_@RqEjOvUx\\`TjDv@yi@ttA~Gr}@`Fxi@ad@v]yJ|gAxlAjsAz_@|l@oYzbBatAn_CdJdSv_B~f@rlAhk@`j@f_@`rAhpAfs@f`@`kAfg@`Nr_AbgBtNt~@nb@vRlc@gXry@}Wd^iIdv@zfCvgCj{GlcAzxEnkDfkGlgGtpE|eEf{AvzBx{BzvA|_B~\\yAjyBxJzwA|wA~_AznBlgAt_AbhBpsB`xChzAxsA|uAxVnxBnPb}AzCx`EnhA`qDwCnpG~SvrCbmA|lCd{B~jFdZzbCn{@b`EhqA|aBb_Ad}BdkBxjEx[vgC|HluEfUnkBtfB`eF~mAzjD`V~q@y_@pnEtv@byChn@tv@`dBjoFz_@KdbElc@f]|My@bc@da@mKptA`Nhj@aq@fHlAbK~M?Z_UyOw^ji@su@Ju|@`qEX`cBnw@|lAsRjlD_q@~nHgA`vH}m@hvEs]gL~AzkCt[hiCcJlvFuAzzE`a@jbDnlBxyG||C|~B`d@juCaiAf`DoQf`HhS|jBLpmBuLd`Dma@zsBc[ftGcx@t|H{TnyGxTzdA_Bn[kPysBhZm`HvvAk`Rdb@ehBoBypCdF}hB_YgcAzMqx@nEohGriAi~Ca_@mpCopCkoBwpC_iIaKegKlIu{EuX_{CgD{pBs^oXuu@kpEqZmzDymBmwDt`@qkEhEmzCjCiyBqSonCmKm|@rRweC{R}cBw{@{fDeo@}u@q|@g}Cx_@quEqdBcyEs}Ba_HoQ{dJysDyvIiiBejDup@e{D{mAuxDes@a_BcoBkdGgEweJp|AkTl{@u_@lg@_{Afp@suDzBmgAmLyp@qw@sx@wdAafA_~BukA`bAmeBfl@orEtn@}f@xkAbVptAgk@xv@{}A|p@cyAhjAsiHpEkyFbaAceHvLe~Dli@a~Ary@eeBx}@lUbb@jVzf@_NhKs^yH{I
Run Code Online (Sandbox Code Playgroud)
现在理论上我应该能够在地图上显示这条路线,就像..
https://maps.googleapis.com/maps/api/staticmap?size=400x400&path=weight:10%7Ccolor:orange%7Cenc:ecduHxqrE|RfS{SlW_w@zDc{@ig@cVlK}z@j}Aog@z{AuGbdDibAfkGaBpcG}~@vrGy_AhhCoi@feB{bBxu@kxAsSus@|eAcLdyBci@dcByi@ly@`GrgC_S~d@e\\wBugA_uBwuAusAoaCidAs~Dq{DiaAu`CuwAweAevBi@}dDwgCsrAwfBuqFkmBwzEu~DenAa|Bi_BcuDmrAghF_{B_hGa{@chAocAl[m_@pXwk@{z@}Zc~A_hAmn@mdAinBg_@eD{o@moA{_@kz@sn@ca@oWmcCoQsUue@`De{@yH{oA~i@meAliA}wAa]ij@qg@}o@w_@yVrT_k@|Y{oCi`@e_@RqEjOvUx\\`TjDv@yi@ttA~Gr}@`Fxi@ad@v]yJ|gAxlAjsAz_@|l@oYzbBatAn_CdJdSv_B~f@rlAhk@`j@f_@`rAhpAfs@f`@`kAfg@`Nr_AbgBtNt~@nb@vRlc@gXry@}Wd^iIdv@zfCvgCj{GlcAzxEnkDfkGlgGtpE|eEf{AvzBx{BzvA|_B~\\yAjyBxJzwA|wA~_AznBlgAt_AbhBpsB`xChzAxsA|uAxVnxBnPb}AzCx`EnhA`qDwCnpG~SvrCbmA|lCd{B~jFdZzbCn{@b`EhqA|aBb_Ad}BdkBxjEx[vgC|HluEfUnkBtfB`eF~mAzjD`V~q@y_@pnEtv@byChn@tv@`dBjoFz_@KdbElc@f]|My@bc@da@mKptA`Nhj@aq@fHlAbK~M?Z_UyOw^ji@su@Ju|@`qEX`cBnw@|lAsRjlD_q@~nHgA`vH}m@hvEs]gL~AzkCt[hiCcJlvFuAzzE`a@jbDnlBxyG||C|~B`d@juCaiAf`DoQf`HhS|jBLpmBuLd`Dma@zsBc[ftGcx@t|H{TnyGxTzdA_Bn[kPysBhZm`HvvAk`Rdb@ehBoBypCdF}hB_YgcAzMqx@nEohGriAi~Ca_@mpCopCkoBwpC_iIaKegKlIu{EuX_{CgD{pBs^oXuu@kpEqZmzDymBmwDt`@qkEhEmzCjCiyBqSonCmKm|@rRweC{R}cBw{@{fDeo@}u@q|@g}Cx_@quEqdBcyEs}Ba_HoQ{dJysDyvIiiBejDup@e{D{mAuxDes@a_BcoBkdGgEweJp|AkTl{@u_@lg@_{Afp@suDzBmgAmLyp@qw@sx@wdAafA_~BukA`bAmeBfl@orEtn@}f@xkAbVptAgk@xv@{}A|p@cyAhjAsiHpEkyFbaAceHvLe~Dli@a~Ary@eeBx}@lUbb@jVzf@_NhKs^yH{I&sensor=true
Run Code Online (Sandbox Code Playgroud)
但是,唉,这不起作用,任何人都有任何想法为什么?这应该是一个相当基本的练习.因为它只是使用谷歌自己的API.
google-maps google-maps-api-3 google-maps-markers google-maps-static-api google-directory-api
使用Admin SDK的Directory API更新用户信息时收到错误:
400 BAD_REQUEST
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid Input: Bad request for ",
"reason" : "invalid"
} ],
"message" : "Invalid Input: Bad request for "
}
Run Code Online (Sandbox Code Playgroud)
尝试为用户更新组织详细信息,如名称,标题和部门
我的示例代码: `
Get users = directoryService.users().get(userEmail);
User user = users.execute();
try{
List<UserOrganization> userOrg = new ArrayList<UserOrganization>();
userOrg = user.getOrganizations();
if(userOrg != null){
UserOrganization f_userOrg = new UserOrganization();
f_userOrg = userOrg.get(0);
if(f_userOrg != null){
f_userOrg.setTitle("SAP Asso");
f_userOrg.setName("xyz company name");
f_userOrg.setDepartment("xyz dept name"); …Run Code Online (Sandbox Code Playgroud) java google-app-engine google-admin-sdk google-directory-api
信息位:
我们正在尝试为使用 Google Classroom 或 Google G-Suite for Education 的学生建立登录。本质上,单点登录系统。学生和管理员将登录,我将验证他们的电子邮件扩展名,这对他们的地区来说是唯一的,然后我会将他们放入我们系统中正确的学校。
这种将用户帐户划分为我们系统中的许可证的过程是在用户登录时即时进行的,因此在开始时不需要大量数据转储。
用户和管理员必须被路由到我们系统中的正确学校,因为管理员在我们的系统中运行报告和管理用户,并且需要具有正确的访问权限。
问题:
我不知道如何Organizational Units从 Google 服务 api获取用户。通常,学校将组织单位作为学校,并将学生分配到这些学校。
因此,当我使用 Oauth2 对用户进行身份验证时
$googleService = new Google_Service_Oauth2($googleClient);
$info = $googleService->userinfo->get();
Run Code Online (Sandbox Code Playgroud)
这工作正常,用于获取一些基本信息,但不包括该用户的组织单位。
然后当我尝试使用Google Directoryapi 时,它工作正常,但前提是用户是管理员
$directory = new Google_Service_Directory($googleClient);
$user = $directory->users->get($userId);
Run Code Online (Sandbox Code Playgroud)
因此,如果登录我的应用程序的人(主要是学生)不是管理员,那么他们将无法从Google Directory.
主要问题:
如何获取经过身份验证的用户(不是管理员)的组织单位?
也许这对于 Google 服务来说是不可能的,但我们在其他六项服务中做到了这一点,没有任何问题。任何帮助表示赞赏。似乎无法在谷歌论坛或代码示例上找到有关此的任何信息。
我已经开始开发一些 api 来在我的 G suite 目录中创建用户。我遵循了服务帐户教程以及python目录教程。我的代码非常简单,只是为了测试它如何工作。
from google.oauth2 import service_account
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/admin.directory.user']
SERVICE_ACCOUNT_FILE = 'file'
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('admin', 'directory_v1', credentials=creds)
results = service.users().list(customer='i am not sure what customer is', maxResults=10, orderBy='email').execute()
#this line produces the error.
#Vscode also states the service has no member users. But I did install all #the libraries
users = results.get('users', [])
print(users)
Run Code Online (Sandbox Code Playgroud)
对我来说,文档对大多数事情都不清楚。当我运行这个时我得到
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/admin/directory/v1/users?customer=students&maxResults=10&orderBy=email&alt=json returned "Bad …Run Code Online (Sandbox Code Playgroud) python google-api http-error service-accounts google-directory-api
google-oauth ×2
java ×2
.net ×1
c# ×1
google-api ×1
google-maps ×1
http-error ×1
python ×1
reactjs ×1
wcf ×1