有没有一种方法可以使用带有API键的“GoogleSheetJavaAPI”,而不是示例中给出的OAuth
https://developers.google.com/sheets/api/quickstart/java
我知道您可以使用HTTP请求通过API键获取数据,但我在想,是否有一种方法可以使用google提供的Java API来实现这一点,这样我就不必为每个请求解析JSON。
您还可以使用以下代码:
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.setGoogleClientRequestInitializer(CommonGoogleClientRequestInitializer.newBuilder().setKey(API_KEY).build())
.build();
是的,你可以,基本上你需要以下东西:
public NetHttpTransport netHttpTransport() throws GeneralSecurityException, IOException {
return GoogleNetHttpTransport.newTrustedTransport();
}
public JacksonFactory jacksonFactory() {
return JacksonFactory.getDefaultInstance();
}
private Set<String> googleOAuth2Scopes() {
Set<String> googleOAuth2Scopes = new HashSet<>();
googleOAuth2Scopes.add(SheetsScopes.SPREADSHEETS_READONLY);
return Collections.unmodifiableSet(googleOAuth2Scopes);
}
public GoogleCredential googleCredential() throws IOException {
File serviceAccount = new ClassPathResource("serviceAccount.json").getFile();
return GoogleCredential.fromStream(new FileInputStream(serviceAccount))
.createScoped(googleOAuth2Scopes());
}
public Sheets googleSheets() {
return new Sheets(netHttpTransport(), jacksonFactory(), googleCredential());
}
您可以阅读更多关于serviceAccount.json
这里:https://cloud.google.com/iam/docs/creating-managing-service-account-keys
以上内容摘自我与谷歌API集成的Spring Boot项目示例:https://github.com/ciscoo/spring-boot-google-apis-example
我没有找到任何官方的方法来实现这一点,但我能够做到这一点,如获取和使用API密钥中所述:
拥有API密钥后,应用程序可以将查询参数key=yourAPIKey
附加到所有请求URL。
通过使用请求拦截器并手动添加key
查询参数,如下所示:
private Sheets getSheets() {
NetHttpTransport transport = new NetHttpTransport.Builder().build();
JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();
HttpRequestInitializer httpRequestInitializer = request -> {
request.setInterceptor(intercepted -> intercepted.getUrl().set("key", API_KEY));
};
return new Sheets.Builder(transport, jsonFactory, httpRequestInitializer)
.setApplicationName(APPLICATION_NAME)
.build();
}
public List<List<Object>> getValues(String spreadsheetId, String range) throws IOException {
return getSheets()
.spreadsheets()
.values()
.get(spreadsheetId, range)
.execute()
.getValues();
}
Swagger支持api密钥的安全性,但这似乎仅限于单个参数。 有没有办法定义一组参数(key和secret)作为请求中的参数? 或者,唯一的方法就是跳过安全方案,只将这些参数添加到每个请求中?
我得到异常“http://api.openweathermap.org/data/2.5/weather?q=sydney”。有人能帮忙怎么用吗。当我粘贴以下内容时,可以很好地使用web浏览器 我也试过下面的组合,但没有运气
我遇到了很多文章,很多文章建议使用OAuth over API密钥。据我所知,在OAuth中,我们最终获得了访问令牌,它的有效期为很多天。例如,QuickBooks online OAuth令牌的有效期为6个月。 因此,访问令牌等同于API Key。无论谁得到它,都应该像API密钥一样保护它。OAuth调用应该通过HTTPS进行,类似于基于API Key的调用。 相对于OAuth的另一个优势是授权
在AWS Xamarin SDK文档中,的Amazon Cognito Identity API文档在其第二段中指出,“必须使用AWS开发人员凭据来调用此API。” 现在,总的想法是尽量不要泄露API机密 但是上面粗体提到的这段文字是否意味着我不能使用IAM角色和/或策略来调用这些API?这是否意味着我必须在应用程序源代码中包含accessKey和secretKey? AWS提供了Cognito机
我想保护Spring Boot API,使它只对具有有效API密钥和秘密的客户机是可访问的。但是,由于所有数据都是匿名的,程序内部没有身份验证(使用用户名和密码的标准登录)。我试图实现的只是所有API请求都可以仅用于特定的第三方前端。