0

大多数Google Management API似乎已启用服务帐户。例如,我可以检索日历像这样:为服务帐户启用Google群组设置API?

string scope = Google.Apis.Calendar.v3.CalendarService.Scopes.Calendar.ToString().ToLower(); 
string scope_url = "https://www.googleapis.com/auth/" + scope; 
string client_id = "[email protected]"; 
string key_file = @"\path\to\my-privatekey.p12"; 
string key_pass = "notasecret"; 

AuthorizationServerDescription desc = GoogleAuthenticationServer.Description; 
X509Certificate2 key = new X509Certificate2(key_file, key_pass, X509KeyStorageFlags.Exportable); 

AssertionFlowClient client = new AssertionFlowClient(desc, key) { ServiceAccountId = client_id, Scope = scope_url }; 
OAuth2Authenticator<AssertionFlowClient> auth = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState); 

CalendarService service = new CalendarService(auth); 
var x = service.Calendars.Get("[email protected]").Fetch(); 

然而,在GroupssettingsService相同的代码返回一个503 - 服务器不可用。这是否意味着服务帐户不能与该API一起使用?

在可能的相关问题,组设置服务的范围似乎是apps.groups.settings但如果你打电话

GroupssettingsService.Scopes.AppsGroupsSettings.ToString().ToLower(); 

...你appsgroupssettings代替,而嵌入式时期。

是否有另一种方法使用服务帐户的GroupssettingsService?或有关正确范围字符串的任何信息?

非常感谢。

回答

1

为什么您需要为此使用服务帐户?你可以使用普通的OAuth 2.0授权流程从谷歌Apps的超级管理员用户获取授权令牌和使用:

https://developers.google.com/accounts/docs/OAuth2InstalledApp

+2

嗯,你会永远需要的服务帐户同样的原因 - 允许一个可信的后端应用程序使用存储的凭证进行更新,升级超过用户的级别。在这种情况下,一些非超级用户可以定义电子邮件组;该应用程序使用GData组API创建并填充组。理想情况下,它会使用Groupssettings API进行特定的策略设置(例如审核),我不希望用户能够关闭该设置。 –

+0

您只需创建一个真正的Google Apps用户即可单独用作服务帐户。这当然意味着50美元/年,但这不应该考虑糟糕。用户需要成为超级管理员,但OAuth2令牌仅限于组设置API,因此访问权限最小。 –

+0

对我们来说是免费的(教育),但这仍然需要三条腿的授权。除非我错了(我很乐意成为),否则“服务帐户”就是新的Google Apps API适用于双腿授权的方式。所以我编写了2LO访问代码,但是这个特定的API(Groupssettings)似乎将这些请求过滤掉了。 –

相关问题