标签: api-key

第三方 API 如何防止 API 报价被盗?

我正在编写一个使用第三方 API 服务的应用程序(例如 Google 地图、分段分析等...)。所有这些应用程序都会提供一个应该嵌入 JS 代码中的 API 密钥。

因此任何可以检查源的人都知道客户端密钥。这些服务如何防止该密钥的错误使用。假设有人用我的密钥调用这些 API 的次数达到了每日允许的最大 API 调用限制,这将使进一步的实际 API 调用失败。

我知道 Referrer Header 可以用来检查请求来源,但是 Referrer Header 很容易被精明的用户欺骗。

不知道服务方面有没有采取什么措施。看起来是一个非常大的问题。

提前致谢。

security api google-maps api-key

6
推荐指数
1
解决办法
955
查看次数

IdentityServer4 个人访问令牌(类似 github)或第三方客户端的 API 密钥

我们目前的设置是

  • 身份服务器4
  • Angular + ASP.NET Core 应用程序
  • 通过隐式 flow/oidc 对应用程序进行身份验证。

我们希望为客户(即第三方客户)提供访问受限(单独的声明集/子集)的 API。这些客户端大多是下载数据的非交互式脚本。

这意味着我们不能使用任何(偶尔)需要用户交互的流程。个人访问令牌,如在 github 中,或其他一些生成一次,需要长时间重用API 密钥或令牌。

长令牌生命周期不会是一个安全问题,因为令牌应该只允许访问少数只读 API 并且只允许访问该客户的数据 - 因此处理令牌的责任落在了客户身上。

客户应该能够根据他们的声明创建和撤销此类 API 访问令牌。一些用户可能只声称访问某些 API。

如果我们以后可以防止用户因为许可要求而对多个客户端重复使用相同的令牌,那将会很好,但这可能是一个全新的问题

我怎么能做到这一点?

我想通过自定义授权来做到这一点,类似于委托授权:用户使用应用程序,它调用 asp.net 核心 API,使用该自定义授权执行身份验证,将该令牌保留在某处(只是数据库中的一个普通表)仅限客户 api 的令牌?我不确定)并将其显示给用户 - 用户也可以稍后从存储中检索它。

我正在考虑通过我们的 API 进行“委托”身份验证,这样我们就不会将机密泄露到 Angular 应用程序中。

我认为我们应该能够通过该自定义授权获得长期访问令牌或至少刷新令牌。

2017-12-12 我觉得我怎么解决

我们想要一个过程,用户在我们的应用程序中生成一些东西(即通过我们的客户端),然后用户的第三方客户端可以使用这些东西来访问 API - 或者请求访问令牌然后访问 API。

我们希望此访问与用户相关联。这包括 - 残疾用户 - 锁定 - 特定索赔(例如租户)

这并不适合直接发布访问令牌的解决方案,因为即使用户被禁用或锁定,令牌仍将保持有效。这意味着我们不能使用自定义授权或IdentityServerTools直接发行代币。

因此,我们应该使用客户端凭据授权或类似的东西,因为这可能会产生新的、短期的访问令牌。

  • 用户实际上生成了一个新的客户端,它预先填充了来自用户的声明(例如租户 - 这是不可变的),并且具有与用户对应的声明。这透明地发生。密码应由用户提供,并带有更改密码的选项。我们只存储用户和发布的客户端 ID 之间的关系,没有密码。
  • 我们必须创建一个自定义授权,它的工作原理类似于客户端凭据,但还要检查相应的用户是否处于活动状态等(我认为应该可以通过注入UserManager
  • 结果访问令牌的生命周期很短,与我们的 API 的交互预计将是短暂的。

假设写这样的资助足够安全和​​容易,我们应该能够涵盖我们需要的一切。当然,我可能完全忽略了一些东西:)

authentication api-key openid-connect identityserver4

6
推荐指数
0
解决办法
1506
查看次数

apiKeyRequired 在 Google Cloud Endpoints 项目中不起作用

我有一个配置了 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

6
推荐指数
1
解决办法
564
查看次数

AWS Cloudformation 将 API 密钥链接到 API 网关

我有以下 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

6
推荐指数
2
解决办法
7260
查看次数

当我推送到 GitHub 时如何处理秘密 API 密钥,以便在克隆 repo 时我的项目仍然可以运行?

我有一个简单的项目,它向 API 端点发出 HTTP 请求并使用我想保密的 API 密钥。最初我将密钥放在自己的文件中,将密钥导入到使用它的文件中,并将密钥文件添加到 .gitignore。问题是如果有人克隆了 GitHub 存储库,这种方法将不起作用。

所以我的问题是 - 我怎样才能保密我的 API 密钥,但如果有人克隆了 repo,我的项目仍然可以运行?

非常感谢任何反馈。

git api-key secret-key

6
推荐指数
1
解决办法
3392
查看次数

共享github项目而不共享API-Key

我想在 GitHub 上与其他人分享我的项目,以便他们可以查看我的代码。

然而,在项目文件中,有我的 API 密钥,每个人都可以看到它。

  • 会有问题吗?
  • 有什么办法可以隐藏API-Key吗?
  • 关于共享项目我还应该了解什么吗?

感谢任何提示或建议。

github api-key

6
推荐指数
1
解决办法
2238
查看次数

如何不使用 app.json 存储 Google Maps 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文件应该提交时,我应该在哪里存储这些密钥?

google-maps api-key react-native expo

6
推荐指数
1
解决办法
1848
查看次数

google-services.json 中存在多个 api 密钥

我有一个包含 2 个 Android 应用程序的 firebase 项目,分别是com.app.examplecom.app.example.dev。一种是指向生产环境并发布在play商店中,另一种是出于开发目的不发布在网上。

这 2 个应用程序具有不同的 api 密钥,在GCP -> APIs and services -> Credentials

根据Firebase 文档的此部分:

Firebase 项目中的所有 Android 应用都列在同一个配置文件中,每个应用只能列出一个 API 密钥。不过,此配置文件中的每个应用程序都可以列出不同的密钥。

事实并非如此,因为两个 Api 密钥都是在提供的google-services.json. 我解决了从两个应用程序中删除错误的 Api 密钥的问题,但这意味着我必须手动删除edit google-services.json

如何在不触及文件的情况下解决问题?

android api-key firebase google-cloud-platform

6
推荐指数
0
解决办法
520
查看次数

我在哪里可以找到我的Yahoo Developer API密钥?

我刚刚注册了雅虎开发人员API密钥.他们没有通过电子邮件向我发送链接或信息.它已被批准,但我无法确定在哪里查看生成的API.所有与谷歌的链接似乎再次指向应用程序页面.

我能在哪里找到我的API密钥?!

ps:我讨厌你,雅虎.

api yahoo oauth api-key

5
推荐指数
1
解决办法
5349
查看次数

每个开发人员都需要自己的Google Map Api-key吗?

我刚刚开始使用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代码和此代码之间有什么区别?应该使用哪一个?

谢谢你的任何解释

android google-api api-key google-maps-api-3

5
推荐指数
0
解决办法
3631
查看次数