OAuth - 验证与授权

我收到 401 错误,提示信息:“持有者令牌无效”。我哪里出错了?

请检查您的授权报头是否和 RFC 6750 OAuth 2.0 授权框架:持有者令牌用法第 2.1 节中的描述一致。

 

     GET /resource HTTP/1.1
     Host: server.example.com
     Authorization: Bearer mF_9.B5f-4.1JqM

OAuth 代码和令牌经过多长时间后失效?

授权码 = 1 分钟

访问令牌 = 30 分钟

刷新令牌 = 90 天

 

授权码 - 使用 Digikey.com 登录信息对客户端应用程序认证后授予,用于接收访问令牌。

访问令牌 - 用于提出请求

刷新令牌 - 访问令牌失效后使用。 提交刷新令牌,获取有效访问令牌。

在“获取您的授权码”过程中出错

授权处理期间会弹出一个密码表单。 在此表单中,需要您使用“我的 DigiKey 账户”信息。

如您没有“我的 DigiKey 账户”,您可以进入 https://www.digikey.com/MyDigiKey/Register 页面创建。

如您不知道自己的“我的 DigiKey 账户”信息或用户名,您可进入 https://www.digikey.com/MyDigiKey/login 页面重新设置或者查找。

刷新令牌什么时候失效?

刷新令牌 90 天后失效,除非有以下情况:

  • 针对新的访问令牌(和新的刷新令牌)进行了延期。
  • 已注册的应用程序客户端 ID 或客户端密钥已重置,所有令牌将变得无效。

您可以提供一些虚拟代码用于 DigiKey API 客户端访问的 OAuth 2.0 实现吗?

请通过链接DigiKey GitHub Repository. 访问 DigiKey  针对 OAuth2 C# / Java 客户端库的 GitHub 页面。

我正尝试创建客户端应用程序,但我没有 OAuth 重定向 URL - 我该怎么做?

如果您没有基础架构设置来处理来自 DigiKey 的响应,您可以使用 https://localhost 的初始值。

我需要使用 OAuth 吗? 我可以换一个永久的令牌吗?

Digi-Key 发现,实现 OAuth 2.0 是相互保证用户身份以及用户允许访问我们的 API 的最简单方法。 由于我们的 API 会暴露敏感信息,因此 Digi-Key 仅允许客户端通过 OAuth 2.0 访问进行验证。 Dig-Key 严格使用三段式 OAuth 流程。

Digi-Key 不允许通过永久性访问令牌和任何其它同样不安全的流程进行访问。

我如何获得访问令牌?

我如何才能得到访问令牌,这样我的应用程序就能调用你们的 API?

当从您的应用程序调用 API 时,您需要传递一个访问令牌。 访问令牌可以通过对 DigiKey 授权服务器进行 API 调用获得。 如需详细了解,请参见OAuth 2.0 文档

客户端 ID 和客户 ID 有什么区别?

客户端 ID 注册到您的客户端应用程序,是访问 API 必需的。

客户 ID 注册到您的“我的 DigiKey” 账户。 当您的账户注册了多个客户 ID 时,客户 ID 就可以被传递到 API 请求中。

如果您的“我的 DigiKey”账户采用了不同的币种或者注册了多个用户,您就可以有多个客户 ID。

我收到了 401 状态码和错误信息:持有者令牌无效

错误信息:

{'ValidationErrors': [], 'ErrorDetails': '确保授权报头包含有效的持有者令牌', 'ErrorResponseVersion': '3.0.0.0', 'StatusCode': 401, 'RequestId': '98cc4acc-2335-4121-9aba-ddc65fe2be40', 'ErrorMessage': '持有者令牌无效'}

 

验证授权报头的值是否包含前缀“Bearer”

例如: "Authorization": "Bearer xGr69sdAjLmnAHwGF4R1HedfDHl3j"

 

必须发送单词 "Bearer",否则将收到持有者令牌错误。

"Authorization":"Bearer <bearertoken>"

产品、计划和 API

是否可以发布一个唯一 ID 值,并在响应过程由 API 返回此 ID。

API 只接受 API 文档中引用的内容。

如何看到我的 API 使用情况?

每个 API 响应都伴随着以下一组响应报头,以确定您的客户端应用程序的使用状态。

 

报头描述
X-RateLimit-Limit允许客户每天发出请求的最大数量。
X-RateLimit-Remaining当前速率限制窗口中剩余的请求数量。

应用程序和组织的生产应用程序之间有什么区别?

应用程序可以调用沙盒 API 端点,但不能调用生产版本。 这些应用程序仅对您可见。 您组织内的每个成员可共享生产应用程序,但仅能调用生产版本。

有没有办法调用产品详情或其他 API,只获取价格而不需要其它信息?

有。 您可以在所有 API 中使用“Includes”报头列出希望返回的字段。

为什么 KeywordSearch 结果中的价格和数量与网站或 ProductDetails 的结果不同?

关键字搜索数据经过缓冲,并且可能长达 24 小时得不到更新。 如需实时定价和供货情况,请使用 ProductDetails。

如何搜索具有特定属性的产品,如电阻或尺寸?

您可以通过使用 ParametricFilters 和之前更广泛搜索的结果来缩小关键词搜索范围。

API 响应 - 意外响应和错误代码

定价响应与 DigiKey 网站上的不同吗?

将 API 定价响应与 DigiKey 网站相匹配:

  1. 使用 PartSearch API 的产品详情操作
  2. 验证请求是否提供了正确的本地信息(如网站上设置的信息)。
  3. 验证请求是否在 API 请求中提供了相同的客户 ID(与在 DigiKey 网站上注册的相同)

这是唯一能提供零件准确定价的过程。

提交请求至:

/Search/v3/Products/p5555-nd

用本地信息刷新 API 请求:

	--header 'x-digikey-locale-currency: REPLACE_THIS_VALUE' 
	--header 'x-digikey-locale-language: REPLACE_THIS_VALUE' 
	--header 'x-digikey-locale-shiptocountry: REPLACE_THIS_VALUE' 
	--header 'x-digikey-locale-site: REPLACE_THIS_VALUE'

当在开发者入口使用测试工具时收到 400 错误消息 - 如何修复?

在使用开发者入口测试工具时,如果没有输入所有的报头必填字段,就会收到 400 错误,或者收到乱码消息。

我的客户端应用程序收到套接字异常/连接重置消息,哪里出问题了?

这很可能是由于所使用的 TLS 协议版本造成的。 请确保您的应用程序使用的是 TLSv1.2。

我收到错误代码 429,我什么时候可以再次发出请求?

每个 API 响应都伴随着以下一组报头,以确定客户端应用程序的使用状态。

 

报头描述
X-RateLimit-Limit允许客户每天发出请求的最大数量。
X-RateLimit-Remaining当前速率限制窗口中剩余的请求数量。

 

一旦应用程序超出速率限制窗口,该应用程序就会收到一个状态码:

429 请求过多

 

当超过触发限值时,响应报头会变为:

报头描述
Retry-After再次请求前需等待的秒数
X-BurstLimit-LimitAPI 允许的最大请求数,用“每分钟次数”表示
X-BurstLimit-Remaining当前速率限制窗口中剩余的请求数量。
X-BurstLimit-Reset等待触发限值窗口重置的秒数
X-BurstLimit-ResetTime触发限值窗口重置时的时间,用 GMT(格林威治标准时间) 表示

 

并收到如下 JSON 响应消息:

{
    "ErrorResponseVersion": "3.0.0.0",
    "StatusCode": 429,
    "ErrorMessage": "BurstLimit exceeded",
    "ErrorDetails": "Please try again after the number of seconds in the Retry-After header",
    "RequestId": "fa3e4d88-bfc4-4565-c6d5-a567633c091b",
    "ValidationErrors": []
}

 

当超过每日限值时,响应报头会变为:

报头描述
Retry-After再次请求前需等待的秒数
X-RateLimit-LimitAPI 允许的最大请求数量
X-RateLimit-Remaining当前速率限制窗口中剩余的请求数量。
X-RateLimit-Reset等待已超速率限制窗口重置的秒数
X-RateLimit-ResetTime速率限制窗口重置的时间,用 GMT(格林威治标准时间) 表示

 

并收到如下 JSON 响应消息:

{
    "ErrorResponseVersion": "3.0.0.0",
    "StatusCode": 429,
    "ErrorMessage": "Daily Ratelimit exceeded",
    "ErrorDetails": "Please try again after the number of seconds in the Retry-After header",
    "RequestId": "f4a0c1ab-8b47-4a72-e010-8ebe5d78f96c",
    "ValidationErrors": []
}

我收到一个错误代码 (400,401,405,429) 。这些代码的含义是什么?

HTTP 状态代码描述
200 OK成功。
400 错误请求输入参数错误。 错误消息应指明哪一个以及原因。 不知何故,您的客户端请求格式错误/无效。 也可能是请求的零件未找到,但这种可能性极小。
401 未授权客户端传入无效访问令牌。 客户端应刷新此令牌,然后重试。 或者您还没有将客户端应用订阅至 DK API 产品。
404 未发现资源未找到。
405 方法不允许资源不支持指定的 HTTP 动词。 您提交的请求使用了非预期格式。 例如,当需要以 POST 方式提供数据时,提交的却是 GET 请求。
429 请求过多请求次数过多,超出速率限制。 在特定时间内请求数量过多(>120 /分钟),或超过当前速率限制窗口允许的值。
500 内部服务器错误服务器未按预期运行。 请求可能有效,但需要稍后重新请求。
503 服务不可用服务不可用。

搜索问题

如何搜索包含特殊字符的零件?

如果零件编号包含特殊字符,则应对特殊字符使用 URL 编码。

例如,零件编号 "MCP2221A-I/ML-ND" 发送时应使用 "MCP2221A-I%2FML-ND" URL 编码。

沙盒产品搜索,响应时总是返回示例产品。

沙盒的目的是测试您的代码与我们 API(授权和认证)的通信能力。

您收到的数据将具有正确的响应结构,但数据本身可能与您的请求不符。

当您确认您有能力与我们的 API 通信后,建议您切换到生产版本。