【问题标题】:New Relic License Key Validation新的 Relic 许可证密钥验证
【发布时间】:2021-03-03 04:16:05
【问题描述】:

我需要实现一个函数来检查提供的 New Relic 许可证密钥 在 JavaScript 应用程序中是否有效(如现有或活动的)。

我查看了文档,但找不到 API 端点来检查这一点。

编辑:需要明确的是,我们将没有可用的 API 密钥来访问 API 端点并从 JSON 响应中读取 http 状态 - 虽然这将是一个解决方案,但我们将只有可用的许可证密钥有效性检查。

【问题讨论】:

    标签: javascript newrelic


    【解决方案1】:

    只需调用他们的任何端点,如果您的 api 密钥错误,它将以错误消息响应。这样做,他们的所有端点都是许可证密钥检查器。

    您将收到类似的 json 响应。

    {"error":{"title":"No API key specified"}}
    

    【讨论】:

    • 我很抱歉并将编辑问题以使其更清楚,但我们不会也不会收集 API 密钥,仅提供许可证密钥,我们可以使用它来确定密钥确实有效
    • 您是否查看过nerdGraph 的查询键部分,可能对您有用。
    • 我有,但很遗憾,所有查询都需要帐户 ID,我们也不收集该 ID
    【解决方案2】:

    除了检查它是否为 40 个字符的十六进制字符串外,我不确定您可以做些什么来验证许可证密钥。 Ruby 代理使用这种方法:

    # A license key is an arbitrary 40 character string,
    # usually looks something like a SHA1 hash
    def correct_license_length
      key = Agent.config[:license_key]
      
      if key.length == 40
        true
      else
        ::NewRelic::Agent.logger.error("Invalid license key: #{key}")
        false
      end
    end
    

    agent.rb:443-454

    代理不会检查非十六进制字符,但如果您认为有必要,您可以使用此正则表达式:/^[0-9A-F]+$/

    我想大多数情况下密钥无效是由于粘贴作业不完整(字符太少或没有)或附加了一些随机字符(错字)造成的。在这两种情况下,这应该都能很好地覆盖您。

    【讨论】:

    • 感谢您的回复@thejonanshow。我们已经在前端实施了类似的检查。但是,我们发现这还不够。在与New Relic 的人讨论后,我们确定目前无法进行此类检查
    • 如果您无法使用正确的 API 密钥向 API 识别自己,则没有公开可用的端点来检查许可证密钥是否有效。这将允许不良行为者暴力搜索有效的许可证密钥,并用垃圾数据淹没他们发现的任何帐户。
    • 这是一个很好的观点,也是一个不通过 API 检查提供这种验证检查的正当理由。我没想到。
    猜你喜欢
    • 2014-05-25
    • 2018-10-09
    • 2010-09-20
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2016-04-11
    相关资源
    最近更新 更多