gpt4 book ai didi

google-app-engine - 调用 App Engine Endpoints API 时如何生成 OAuth2.0 Bearer?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:31 25 4
gpt4 key购买 nike

我正在通过 App Engine 提供 REST API。我使用 Cloud Endpoints 生成它,尽管客户端不是移动 Android/iPhone,而是已知的 Web 服务器。由于我熟悉此服务器(它是我的应用程序的一部分),我决定使用服务帐户授权来授权 API 调用(此外,我将进行 IP 验证,但这不是重点)。

我做了所有必要的安排,创建了一个 Google 开发者项目,生成了一个服务帐户 ID(和电子邮件),带有一个 p12 文件,并添加了服务器端所需的所有注释(包括实现函数中的用户对象) ).

现在我想实现对此 API 的调用,为了使其正常工作,我需要在请求中包含适当的授权 header 。

使用 Google API 时,客户端库会生成一些 Credential 对象,您稍后需要在构建一些 Service 对象时传递该对象,它代表您希望调用的 Google API。例如,如果您想使用 Java 访问 Drive API,您将执行:

Drive drive = new Drive.Builder(Globals.httpTransport, Globals.jsonFactory, credential).build();

其中credential对象是我之前构建的对象如下:

credential = new GoogleCredential.Builder().setTransport(Globals.httpTransport).setJsonFactory(Globals.jsonFactory).setServiceAccountId(serviceAccountEmail).setServiceAccountScopes(范围).setServiceAccountUser(serviceAccountUser).setServiceAccountPrivateKeyFromP12File(文件(serviceAccountPrivateKeyP12File)).build();

但是,在我的例子中,客户端调用的不是 Google API,而是我的 App Engine REST API。我如何着手生成(或使用我创建的凭据对象来获取)正确的授权 header ?

最佳答案

您可以在与绑定(bind)一起生成的 readme.html 文件中找到一些文档,并且 here .

您可以在console中获取以下账户信息, "APIs & Auth", "凭证"。在这里您需要粘贴服务帐户的“电子邮件地址”。您的@Api 注释应在“clientIds”参数中包含帐户的“Client Id”。

String accountEmail = "your-service-account@developer.gserviceaccount.com";
String keyFilePath = "your-key-file.p12";

这是 Cloud Endpoints API 所需的最小授权范围。它只允许应用程序访问用户的电子邮件地址。您的 @Api 注释应将其列在“范围”参数中。

String emailScope = "https://www.googleapis.com/auth/userinfo.email";

然后您需要创建一些支持对象和凭证。如果您愿意,可以将 GsonFactory 替换为 JsonFactory。

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GsonFactory gsonFactory = new GsonFactory();

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(gsonFactory)
.setServiceAccountId(accountEmail)
.setServiceAccountScopes(Collections.singleton(emailScope))
.setServiceAccountPrivateKeyFromP12File(new File(keyFilePath))
.build();

最后创建您的 API 客户端。用生成的绑定(bind)中的客户端替换 YourApi。如果您想针对开发 AppServer 进行测试,您可以在构建器上调用 .setRootUrl(yourDevServerUrl + "/_ah/api")。

YourApi client = new YourApi.Builder(httpTransport, gsonFactory, credential)
.setApplicationName("YourClientName")
.build();

关于google-app-engine - 调用 App Engine Endpoints API 时如何生成 OAuth2.0 Bearer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com