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 登录信息对客户端应用程序认证后授予,用于接收访问令牌。

访问令牌 - 用于提出请求

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

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

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

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

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

刷新令牌什么时候失效?

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

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

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

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

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

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

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

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

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

我如何获得访问令牌?

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

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

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

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

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

如果您的“我的 Digi-Key”账户采用了不同的币种或者注册了多个用户,您就可以有多个客户 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 响应 - 意外响应和错误代码

定价响应与 Digi-Key 网站上的不同吗?

将 API 定价响应与 Digi-Key 网站相匹配:

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

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

提交请求至:

/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 通信后,建议您切换到生产版本。