我正在编写一个使用第三方 API 服务的应用程序(例如 Google 地图、分段分析等...)。所有这些应用程序都会提供一个应该嵌入 JS 代码中的 API 密钥。
因此任何可以检查源的人都知道客户端密钥。这些服务如何防止该密钥的错误使用。假设有人用我的密钥调用这些 API 的次数达到了每日允许的最大 API 调用限制,这将使进一步的实际 API 调用失败。
我知道 Referrer Header 可以用来检查请求来源,但是 Referrer Header 很容易被精明的用户欺骗。
不知道服务方面有没有采取什么措施。看起来是一个非常大的问题。
提前致谢。
我们目前的设置是
我们希望为客户(即第三方客户)提供访问受限(单独的声明集/子集)的 API。这些客户端大多是下载数据的非交互式脚本。
这意味着我们不能使用任何(偶尔)需要用户交互的流程。个人访问令牌,如在 github 中,或其他一些生成一次,需要长时间重用API 密钥或令牌。
长令牌生命周期不会是一个安全问题,因为令牌应该只允许访问少数只读 API 并且只允许访问该客户的数据 - 因此处理令牌的责任落在了客户身上。
客户应该能够根据他们的声明创建和撤销此类 API 访问令牌。一些用户可能只声称访问某些 API。
如果我们以后可以防止用户因为许可要求而对多个客户端重复使用相同的令牌,那将会很好,但这可能是一个全新的问题
我怎么能做到这一点?
我想通过自定义授权来做到这一点,类似于委托授权:用户使用应用程序,它调用 asp.net 核心 API,使用该自定义授权执行身份验证,将该令牌保留在某处(只是数据库中的一个普通表)仅限客户 api 的令牌?我不确定)并将其显示给用户 - 用户也可以稍后从存储中检索它。
我正在考虑通过我们的 API 进行“委托”身份验证,这样我们就不会将机密泄露到 Angular 应用程序中。
我认为我们应该能够通过该自定义授权获得长期访问令牌或至少刷新令牌。
我们想要一个过程,用户在我们的应用程序中生成一些东西(即通过我们的客户端),然后用户的第三方客户端可以使用这些东西来访问 API - 或者请求访问令牌然后访问 API。
我们希望此访问与用户相关联。这包括 - 残疾用户 - 锁定 - 特定索赔(例如租户)
这并不适合直接发布访问令牌的解决方案,因为即使用户被禁用或锁定,令牌仍将保持有效。这意味着我们不能使用自定义授权或IdentityServerTools直接发行代币。
因此,我们应该使用客户端凭据授权或类似的东西,因为这可能会产生新的、短期的访问令牌。
UserManager)假设写这样的资助足够安全和容易,我们应该能够涵盖我们需要的一切。当然,我可能完全忽略了一些东西:)
我有一个配置了 Cloud Endpoints Framework 的 java 8 项目。
我遵循了这里的文档:https : //cloud.google.com/endpoints/docs/frameworks/java/get-started-frameworks-java
我尝试使用 API 密钥保护 API。我遵循了这里的文档:https : //cloud.google.com/endpoints/docs/frameworks/java/restricting-api-access-with-api-keys-frameworks
问题是我总是可以访问端点,无论我是否设置了 API 密钥。
这是API:
@Api(
name = "myApi",
title = "My API",
version = "v1",
description = "My API description",
apiKeyRequired = AnnotationBoolean.TRUE
)
public class MyApiEndpoint {
@ApiMethod(httpMethod = GET, path = "list", apiKeyRequired = AnnotationBoolean.TRUE)
public ApiEntityList list() throws Exception {
return new ApiEntityList();
}
}
Run Code Online (Sandbox Code Playgroud)
这是 web.xml:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<filter>
<filter-name>endpoints-api-controller</filter-name> …Run Code Online (Sandbox Code Playgroud) java api-key google-cloud-platform google-cloud-endpoints-v2
我有以下 Cloudformation 模板,我正在尝试通过 SAM 进行部署。此模板正确创建了 DynamoDB 表、API 密钥、Lambda 函数和 API 网关,但我无法弄清楚需要在模板中指定什么才能将 API KEY 与 API 网关相关联。
我发现了很多显示部分示例的片段,但我正在努力将它们拼凑在一起。
先感谢您,
丹尼
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Parameters:
TableName:
Type: String
Default: 'influencetabletest'
Description: (Required) The name of the new DynamoDB table Minimum 3 characters
MinLength: 3
MaxLength: 50
AllowedPattern: ^[A-Za-z-]+$
ConstraintDescription: 'Required parameter. Must be characters only. No numbers allowed.'
CorsOrigin:
Type: String
Default: '*'
Description: (Optional) Cross-origin resource sharing (CORS) Origin. You can specify a single origin, all "*" or leave empty …Run Code Online (Sandbox Code Playgroud) api-key amazon-web-services aws-cloudformation aws-api-gateway
我有一个简单的项目,它向 API 端点发出 HTTP 请求并使用我想保密的 API 密钥。最初我将密钥放在自己的文件中,将密钥导入到使用它的文件中,并将密钥文件添加到 .gitignore。问题是如果有人克隆了 GitHub 存储库,这种方法将不起作用。
所以我的问题是 - 我怎样才能保密我的 API 密钥,但如果有人克隆了 repo,我的项目仍然可以运行?
非常感谢任何反馈。
我想在 GitHub 上与其他人分享我的项目,以便他们可以查看我的代码。
然而,在项目文件中,有我的 API 密钥,每个人都可以看到它。
感谢任何提示或建议。
我必须以安全的方式存储我的 Google Maps API 密钥(不是提交的文件),但是当我使用 Expo 时,Google Maps API 密钥存储在app.json文件中,如下例所示:
"ios": {
"config": {
"googleMapsApiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
},
"android": {
"config": {
"googleMaps": {
"apiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我的app.json文件应该提交时,我应该在哪里存储这些密钥?
我有一个包含 2 个 Android 应用程序的 firebase 项目,分别是com.app.example和com.app.example.dev。一种是指向生产环境并发布在play商店中,另一种是出于开发目的不发布在网上。
这 2 个应用程序具有不同的 api 密钥,在GCP -> APIs and services -> Credentials
根据Firebase 文档的此部分:
Firebase 项目中的所有 Android 应用都列在同一个配置文件中,每个应用只能列出一个 API 密钥。不过,此配置文件中的每个应用程序都可以列出不同的密钥。
事实并非如此,因为两个 Api 密钥都是在提供的google-services.json. 我解决了从两个应用程序中删除错误的 Api 密钥的问题,但这意味着我必须手动删除edit google-services.json。
如何在不触及文件的情况下解决问题?
我刚刚注册了雅虎开发人员API密钥.他们没有通过电子邮件向我发送链接或信息.它已被批准,但我无法确定在哪里查看生成的API.所有与谷歌的链接似乎再次指向应用程序页面.
我能在哪里找到我的API密钥?!
ps:我讨厌你,雅虎.
我刚刚开始使用Android中的Google map api.我按照https://developers.google.com/maps/documentation/android/mapkey中的说明在 debug.keystore上生成了我的MD5证书指纹 ,后来通过以下链接生成了Api密钥:http: //code.google.com /android/maps-api-signup.html
它正如预期的那样运作良好.但问题是我们是几个不同的程序员共享相同的代码库,每个程序员应该创建自己的密钥并更改xml文件以使其工作似乎很奇怪.
有没有办法为谷歌地图API创建一个可以在开发人员之间共享的更全局的密钥?
使用Google API控制台https://code.google.com/apis/console ,我还为Google Map API创建了一个密钥,并将其他程序员作为团队成员添加到项目中,但该代码似乎不起作用.甚至对我来说都没有!第一个API代码和此代码之间有什么区别?应该使用哪一个?
谢谢你的任何解释
api-key ×10
android ×2
api ×2
google-maps ×2
expo ×1
firebase ×1
git ×1
github ×1
google-api ×1
java ×1
oauth ×1
react-native ×1
secret-key ×1
security ×1
yahoo ×1