首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用GoogleAdminDirectoryAPI-403添加未授权访问此资源/ API的组

使用GoogleAdminDirectoryAPI-403添加未授权访问此资源/ API的组
EN

Stack Overflow用户
提问于 2018-12-18 17:41:04
回答 1查看 1.4K关注 0票数 3

我试图从运行在上的Java应用程序中添加一个使用的组。我已经看了很多其他相关的问题,并尝试了一些建议,但我仍然得到了这个问题。

我使用Google控制台创建了一个新的服务帐户,并启用了G-Suite域范围的委托。我为服务帐户创建了一个JSON密钥。

我在Google控制台中启用了,对于该服务帐户的“客户机ID”,我随后在“安全性”>“高级设置”>“管理API客户端访问”下分配了Google控制台中的API范围。我正在分配范围https://www.googleapis.com/auth/admin.directory.group

在Google控制台中,我还在account > admin角色下将系统管理帐户设置为组Admin:

然后,在运行在Google上的Java应用程序中,我执行以下操作来使用服务帐户凭据来模拟我授予Group Admin权限的超级管理员用户:

代码语言:javascript
运行
AI代码解释
复制
final CREDENTIALS_FILE_PATH = "path_to_my_JSON_credentials_file"
final USER_EMAIL = "email_address_for_superadmin_with_group_admin_rights"

public someMethod() { 
    Directory directory = getDirectoryService(USER_EMAIL); 

    com.google.api.services.admin.directory.model.Group group = new Group(); 
    group.setEmail("myemail@domain.com"); 
    group.setName("test_group"); 
    group.setDescription("test_group_desc"); 

    Group googleGroup = directory.groups().insert(group).execute(); 
} 

/** 
* Build and returns a Directory service object authorized with the service accounts 
* that act on behalf of the given user. 
* 
* @param userEmail The email of the user. Needs permissions to access the Admin APIs. 
* @return Directory service object that is ready to make requests. 
*/ 
public static Directory getDirectoryService(String userEmail) throws GeneralSecurityException, 
IOException, URISyntaxException { 
    HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 

    InputStream resourceAsStream = AdminService.class.getResourceAsStream(CREDENTIALS_FILE_PATH); 
    Collection<String> scopeList = new ArrayList<>(); 
    scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP); 

    GoogleCredential gcFromJson = GoogleCredential.fromStream(resourceAsStream).createScoped(scopeList); 

    GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(gcFromJson.getTransport()) 
    .setJsonFactory(gcFromJson.getJsonFactory()) 
    .setServiceAccountId(gcFromJson.getServiceAccountId()) 
    .setServiceAccountUser(userEmail) 
    .setServiceAccountPrivateKey(gcFromJson.getServiceAccountPrivateKey()) 
    .setServiceAccountScopes(gcFromJson.getServiceAccountScopes()) 
    .build(); 

    Directory service = new Directory.Builder(httpTransport, jsonFactory, null) 
    .setHttpRequestInitializer(credential).build(); 
    return service; 
}

在这条线上:

代码语言:javascript
运行
AI代码解释
复制
Group googleGroup = directory.groups().insert(group).execute(); 

我得到以下错误:

代码语言:javascript
运行
AI代码解释
复制
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Not Authorized to access this resource/api",
    "reason" : "forbidden"
  } ],
  "message" : "Not Authorized to access this resource/api"
}

我需要做些什么来验证身份?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 20:46:04

现在起作用了。导致403的问题之一是,我试图使用与该行中的GSuite域不匹配的域创建一个组:

group.setEmail("myemail@domain.com");

您可能还必须遵循此谷歌指南,才能访问第三方应用程序:

控制对不太安全的应用程序的访问

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53843453

复制
相关文章
SQLite 创建表的方法
SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。
用户4988085
2021/09/17
2.5K0
ABAP 取两个内表的交集 比较两个内表的不同
SAP自带的函数: CTVB_COMPARE_TABLES和BKK_COMPARE_TABLES; 似乎可以比较两个内表,得出第二个内表不同于第一个内表的部分(新增/删除了那些部分) 但是,具体的使用,还请有经验的朋友不吝赐教啊! 因为,我在测试数据时,发现这两个函数的效果不那么简单。 如果上述函数确实可以,提取两个内表不同部分,则我可以据此做两次比较,得到两个内表的交集。 所以,我先用另外一种方式解决了-自己写了一个提取两个内表交集的函数,供大家检阅: *" IMPORTING *" VALUE(ITAB1) TYPE INDEX TABLE *" VALUE(ITAB2) TYPE INDEX TABLE *" EXPORTING *" VALUE(ITABSAME) TYPE INDEX TABLE *"---------------------------------------------------------------------- field-symbols: <S1>, <S2>. data: L1 type i, L2 type i. assign local copy of initial line of: ITAB1 to <S1>, ITAB2 to <S2>. describe: table ITAB1 lines L1, table ITAB2 lines L2. "对记录行数少的内表,执行第一层循环; "在第二层循环中,找到对应记录,即可追加到结果内表; "同时退出第二层循环,继续执行第一层循环的下一行 IF L1 <= L2. LOOP AT ITAB1 INTO <S1>. LOOP AT ITAB2 INTO <S2>. IF <S1> EQ <S2>. APPEND <S1> TO ITABSAME. EXIT. ENDIF. ENDLOOP. ENDLOOP. ELSE. LOOP AT ITAB2 INTO <S2>. LOOP AT ITAB1 INTO <S1>. IF <S1> EQ <S2>. APPEND <S2> TO ITABSAME. EXIT. ENDIF. ENDLOOP. ENDLOOP. ENDIF. ENDFUNCTION. 另一个问题,想请教大家,在上面代码里,第二层循环是为了找出,第一层循环的当前记录,在第二个内表里是否存在;
matinal
2020/11/26
3.2K0
activiti表的创建和简单示例
周杰伦本人
2023/10/12
2860
activiti表的创建和简单示例
比EntityFramework简单很多的SOD框架动态创建表的方法
今天看到一篇博文EntityFramework Core如何映射动态模型? ,文章讲的是如何用EF动态创建表的问题,比如根据时间动态创建一个表,这种场景常出现在应用系统的日志记录功能中。原文用EF实现非常复杂,相比而言,SOD框架就要简单很多。
用户1177503
2021/02/02
8920
SQL2012_创建架构,复合主键,主表,从表的创建方法。
创建架构,复合主键,主表,从表的创建方法。 create schema XIXI--创建架构 create table XIXI.U( id int not null , s_id int not null, u_id int constraint PK_ID primary key(id,s_id,u_id)--创建复合主键 ) create table XIXI.O(--主表 id int constraint PK_OK primary key, ) cre
赵腰静
2018/03/09
2K0
临时表创建_临时表的创建方式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
3.4K0
SQL2012_创建架构,复合主键,主表,从表的创建方法。
创建架构,复合主键,主表,从表的创建方法。 create schema XIXI--创建架构 create table XIXI.U( id int not null , s_id int not null, u_id int constraint PK_ID primary key(id,s_id,u_id)--创建复合主键 ) create table XIXI.O(--主表 id int constraint PK_OK primary key, ) cre
赵腰静
2018/03/09
1.7K0
Greenplum 查看最新创建的表及大小
说明 最近发现GP中空间增长比较快,为了能更好的发现GP中一段时间内增长的表及大小 实现的SQL select pt.schemaname||'.'||ts.relname as tablename, pg_relation_size(pt.schemaname||'.'||ts.relname)/1024/1024/1024 as tablesizegb, ts.stausename,ts.stasubtype,ts.statime from ( SELECT ps.stausename,ps.st
小徐
2020/02/10
7750
Greenplum 查看最新创建的表及大小
Greenplum 查看最新创建的表及大小 说明 最近发现GP中空间增长比较快,为了能更好的发现GP中一段时间内增长的表及大小 实现的SQL select pt.schemaname||'.'||ts.relname as tablename, pg_relation_size(pt.schemaname||'.'||ts.relname)/1024/1024/1024 as tablesizegb, ts.stausename,ts.stasubtype,ts.statime from ( SELECT
小徐
2019/12/27
1.3K0
Greenplum 查看最新创建的表及大小
SQL处理表结构的基本方法整理(创建表,关联表,复制表)
方法二:(由tianshibao提供) CREATE TABLE 新表 LIKE 旧表
学到老
2019/02/14
9760
SQL处理表结构的基本方法整理(创建表,关联表,复制表)
复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2 即:让WHERE条件不成立. 方法二:(由tianshibao提供) CREATE TABLE 新表 LIKE 旧表 复制旧表的数据到新表(假设两个表结构一样) INSERT INTO 新表 SELECT * FROM 旧表 复制旧表的数据到新表(假设两个表结构不一样) INSERT INTO 新表(字段1,字
学到老
2018/03/19
1.8K0
MySQL异步删除大表的方法
在MySQL中有大表需要清理,该表超过100GB,不敢直接delete或者truncate、drop,怕影响业务。
胖五斤
2022/11/10
4.6K0
Hive 中内部表与外部表的区别与创建方法
先来说下Hive中内部表与外部表的区别: Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。 需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否 符合schema的,hive 遵循的是 s
用户1177713
2018/02/24
2.6K0
【求助】从大表中删除小表中存在的记录问题
A表:30万,主键ID B表:300万,主键ID 从B表中删除ID=A表ID的记录。 DELETE FROM B WHERE EXISTS (SELECT 1 FROM (SELECT ID FROM (SELECT T.ID, ROWNUM RN FROM A) WHERE RN > 0 AND RN <= 50000) AB WHERE A.ID = B.ID); 但执行计划显示COST较大,且瓶颈是B表的全表扫描。 需求是这里有B1 ... B10多个B表(都是300万),串行操作
bisal
2019/01/29
5.3K0
数据库中创建表的语句_创建基本表学生表的sql语句
在线Sqlite查看器|修改器 http://lzltool.com/sqlite-viewer
全栈程序员站长
2022/11/02
5.1K0
SQL语句中创建表的语句_用sql创建表
连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)
全栈程序员站长
2022/11/03
4.8K0
SQL语句中创建表的语句_用sql创建表
怎么创建数据表_sqlserver创建表的sql语句
知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间的关系、删除数据库表。
全栈程序员站长
2022/11/17
3.3K0
怎么创建数据表_sqlserver创建表的sql语句
EX-VBA:迄今为止最简单的Excel工作表密码解除方法
Step-01:通过菜单【开发工具】-【Visual Basic】进入VBA编辑界面
大海Power
2021/08/30
7.3K0
点击加载更多

相似问题

从OleDB更新DataTable表的最简单方法

22

使用Zend_Pdf创建表的最简单方法

44

从两个不同的表创建表

23

创建大表的有效方法

10

从两个不同的表sql创建表

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档