Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何模拟在G-Suite域中运行的AppEngine java应用程序的用户?_Java_Google App Engine_Authorization - Fatal编程技术网

如何模拟在G-Suite域中运行的AppEngine java应用程序的用户?

如何模拟在G-Suite域中运行的AppEngine java应用程序的用户?,java,google-app-engine,authorization,Java,Google App Engine,Authorization,我的标准AppEngine应用程序需要在Google工作表文档(以及其他文档)中执行更改 为了实现这一点,我需要获取服务帐户的凭据,并以某种方式配置它应该代表用户行事 此方法允许为我提供默认服务帐户凭据: private static GoogleCredential getDefaultServiceAccountCredential() throws IOException { return GoogleCredential.getApplicationDefault()

我的标准AppEngine应用程序需要在Google工作表文档(以及其他文档)中执行更改

为了实现这一点,我需要获取服务帐户的凭据,并以某种方式配置它应该代表用户行事

此方法允许为我提供默认服务帐户凭据:

private static GoogleCredential getDefaultServiceAccountCredential() throws IOException {
    return GoogleCredential.getApplicationDefault()
        .createScoped(MY_SCOPES);
}
但它不能代表用户工作

以下代码类似,使用其他(非默认)服务帐户,但仍不会发生模拟:

private static GoogleCredential getNonDefaultServiceAccountCredential() throws IOException {
    return GoogleCredential.fromStream(IncomingMailHandlerServlet.class.getResourceAsStream("/tokens/anoher-e6351a8c5b91.json"))
        .createScoped(MY_SCOPES);
}
对于模拟,(以及许多建议)提到了如何使用PKCS12文件进行模拟;但是,该文件只能在已安装的应用程序上读取为
PrivateKey
,而不能在AppEngine上读取

有没有办法为在AppEngine中运行的java应用程序获取模拟凭据? 或者,从AppEngine上的
文件
读取有什么诀窍吗

请注意,对于我尝试的所有服务帐户,我都使用角色所有者和DwD(域范围的委派)对它们进行了配置。还有其他配置吗?

提供了一个示例

还可以使用服务帐户流模拟您拥有的域中的用户。这与上面的服务帐户流非常相似,但是您需要另外调用

appengine web.xml
应该定义资源文件:

<resource-files>
  <include path="path/below/my/project/directory/credentials.json"/>
</resource-files>



选项2:凭据文件位于云存储中。这说明了如何从App Engine Standard访问云存储中的文件。但我认为这太麻烦了。我也提供了这个选项,因为我已经提到了它。

你不能在创建
GoogleCredential
对象后额外调用默认(或非默认)服务帐户,按照你提供的文档中的状态执行模拟吗?你可以使用的应用程序引擎Flex。您可以(更像应该)使用云存储来实现。还要检查如何在应用程序引擎中读取文件。@tudomi是的,这是我想做的第一件事,但你试过吗?没有“额外的称呼”的方法,或者至少我没有找到它。我一定会非常感谢一段代码演示如何使用该注释。我觉得它不适用。对于你的第二个评论:Flex env目前不是meany idea的选项,如何在AppEngine标准环境中使用它?由于不支持对文件系统的AIK访问,因此抱歉延迟。我想知道你可以选择或仅仅使用哪一种方式来获得一个静态文件,并对其进行安全访问。您好@tudomi您能否更改上面的代码,以显示如何在标准环境中使用这些选项?您好@PetrKozelka。我找到了一种更容易(我想说是正确的)使用方法。我将用两种可能性更新答案:资源文件和云存储。@PetrKozelka随时更新!让社区了解情况:)
File f = new File("path/below/my/project/directory/credentials.json");
<resource-files>
  <include path="path/below/my/project/directory/credentials.json"/>
</resource-files>