这个 API 使用啥 OAuth 协议,是不是有一个标准的 OAuth 库可以用来对其进行身份验证?

Posted

技术标签:

【中文标题】这个 API 使用啥 OAuth 协议,是不是有一个标准的 OAuth 库可以用来对其进行身份验证?【英文标题】:What OAuth protocol is this API using and is there a standard OAuth Library I can use to authenticate with it?这个 API 使用什么 OAuth 协议,是否有一个标准的 OAuth 库可以用来对其进行身份验证? 【发布时间】:2015-09-16 16:12:30 【问题描述】:

我遇到了这个使用 OAuth API 进行身份验证的私有 API(不确定它是什么版本或风格的 OAuth)。我对 OAuth 的工作知识不是很好,所以我需要一些指导来解决这个问题。

这是我如何使用 Postman/Advance Rest 控制器 Chrome 扩展手动测试它并成功查询以访问受保护资源的方法。

第 1 步。向具有特定标头的 OAuth 服务 URL 发出 POST 请求。响应包含 OAuth 令牌

Authorization:OAuth oauth_consumer_key="<<key>>",oauth_signature_method="PLAINTEXT",oauth_signature="<<secret>>%26"

这是一个示例响应格式。响应包括 OAuth 令牌和 Oauth 令牌机密(我需要在下一步中使用这两者来访问受保护的资源)

oauth_token=<<token>>&oauth_token_secret=<<secret>>&oauth_session_handle=JN-eMMx1z_Tpy3sFrgzVsssF9Y_pyJaE&oauth_expires_in=3600&oauth_authorization_expires_in=86400

步骤 2. 在使用 Key、Secret 和 OAuth 令牌设置 Authorization 标头后向受保护资源发出 POST/GET 请求

Authorization:OAuth oauth_consumer_key="<consumerKey>",oauth_signature_method="PLAINTEXT",oauth_signature="<consumerSecret>%26<oauth_token_secret>",oauth_token="<oauth_token>"

现在,这是我的问题:

此 API 使用什么版本的 OAuth?

是否有一个标准的 OAuth 客户端库来执行身份验证并让我查询受保护的数据,而无需手动构造带有上述标头的 POST 调用,获取令牌(通过解析响应并提取令牌),使另一个带有另一个格式化标题的 POST/GET 手动调用来访问受保护的资源?如果有怎么办?

我尝试了scribe-java 并扩展了 DefaultApi20.java,但我无法让它工作。然后我想知道我是否正确理解了 API 版本。因为这个私有 API 只给了我一个获取令牌的 URL。不确定此上下文中的授权 URL、请求令牌 URL 和访问令牌 URL 是什么。

我什至尝试查看适用于 Java 的 Google oauth 客户端库,但找不到适合我的上下文的使用示例。任何理解这一点的帮助表示赞赏。

【问题讨论】:

用谷歌搜索这些参数似乎指向 oauth 1.0... @jtahlborn 谢谢。你能找到任何标准的 oauth 客户端库供 java 进行身份验证吗? 有 oauth 1 的 java 库,是的。 @jtahlborn 您介意发布一个分两步获取受保护资源的示例吗?第一次调用获取token,第二次查询资源? 【参考方案1】:

您使用的是 OAuth 1.0。 Scribe 库是使用 Java 的方式:https://github.com/fernandezpablo85/scribe-java。在您的情况下,所谓的 2-legged 授权是它需要做的。以下是带有 Scribe 的 2-legged OAuth 1.0 的示例代码:http://enrico.sartorello.org/blog/2013/08/2-legged-oauth-java-client-made-easy/

【讨论】:

以上是关于这个 API 使用啥 OAuth 协议,是不是有一个标准的 OAuth 库可以用来对其进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

[认证授权] 3.基于OAuth2的认证(译)

Node.js 互联网打印协议 (IPP) API Oauth2 授权

对于从 API 中提取的 AngularJS 安全站点,我应该使用啥 oAuth2 Grant

Odoo 是不是为其 API 实现了 oauth2?

在基于 OAuth2 的身份验证中,状态参数可以防止啥样的 CSRF 攻击?

是否可以通过我的逻辑使用 oauth 协议来创建 clientid 并生成访问令牌来保护 api?