2016-11-11 80 views
1

我有一个Google App Engine项目,通过Google Cloud Endpoints公开API。到目前为止,所有API /端点都使用OAuth2身份验证(和授权),这对于“真实”用户来说很好。Google云端点API密钥授权的Java注释?

现在我想公开一些旨在被机器而不是人类用户使用的新API。我希望这些端点能够使用API​​密钥授权。

在云控制台中,我创建了一个API密钥(API管理器/凭证)。

Google documentation使用yaml文件来配置API密钥授权。但是,我不使用yaml配置,并且它对于Java应用程序似乎并不常见。

我期望对于Java来说,将会有批注使用API​​密钥进行授权。但是,用于Java的Google documentation并没有提到这样的事情。

是否可以在使用注释的Java应用程序中使用API​​密钥?有另一种建议的方式来做到这一点?

更新: 似乎API密钥在测试版(2016年11月)的Cloud Endpoints 2.0中工作。但是,CE 2.0并不支持Google Eclipse插件,并且需要Maven(我非常不喜欢)。我没有时间重写我的项目,所以现在我已经在API中添加了一个额外的'api_key'参数,我在代码中进行检查。请注意,此参数不能称为“密钥”,因为云端点会认为这是它自己的API密钥,并通过说没有配置访问来回应。

回答

2

是的,这是可能的。升级到最新的框架,并在@Api,@ApiClass@ApiMethod使用apiKeyRequired字段。我们最近添加了这个,文档还没有赶上。道歉!

+0

Google Eclipse插件还没有(还)似乎有此更新?它看起来像卡住在1.9.34。或者也许我需要先更新Eclipse(仍然使用Mars 2)? – rakensi

+0

只有新框架支持此功能,而App Engine SDK不附带此功能。您需要com.google.endpoints,endpoints-framework工件。 – saiyr

+0

谢谢,我会试试。 – rakensi

1

昨天我有同样的问题。

我是按照Java和Maven的这个例子:

backend

然而,例如没有API密钥授权。

所以我花了几个小时解密如何添加API密钥授权的例子。

由于没有关于如何在java中添加api-key注释的文档,我所做的是在swagger.json中手动添加注释。

我编辑swagger.json文件并加入:

1)的安全性变量

"Security": [ 
    { 
    "Api_key": [] 
    } 
    ], 
"You consume": [ 
    "Application/json" 
], 

2)在securityDefinitions

"SecurityDefinitions": { 

"Api_key": { 
    "Type": "apiKey", 
    "Name": "key", 
    "In": "query" 
}, 
    "Google_id_token": { 

可变API_KEY这解决了这个问题。

之后,我继续部署到自述文件中定义的App Engine进程。MD例如:

1)gcloud测试服务管理部署swagger.json

2)MVN AppEngine上:更新

我希望这个解决办法可以帮助你!