【问题标题】:How to connect to a API with oAuth 1.0a using javascript? [Angular.js]如何使用 javascript 使用 oAuth 1.0a 连接到 API? [Angular.js]
【发布时间】:2015-02-17 14:26:43
【问题描述】:

目前,我正在开发一个需要连接到外部 API 以获取 JSON 文件的网络应用程序。

我使用的有问题的 API noun project 需要 Oauth1.0a 身份验证。现在这个项目需要我使用 Angular.JS 来处理 JSON 数据。

但在我可以使用 JSON 之前,我需要获取它,这就是事情分崩离析的地方。 当我尝试使用以下代码连接时,我的http://localhost:8080/ 上不断出现以下错误。

错误:

> XMLHttpRequest cannot load
> http://api.thenounproject.com/icons/fish&callback=?&oauth_consumer_key=9c70…891xxxx&oauth_version=1.0&oauth_signature=xxxxx6oeQI0p5U%2Br0xxxxxxx%3D.
> No 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'http://localhost:8080' is therefore not allowed
> access. The response had HTTP status code 403.
> Blockquote

代码:

var oAuth = OAuth({
  consumer: {
    public: '9c704cb01xxxxxxxxx',
    secret: '45b7a8d86xxxxxxxxx'
  },
  signature_method: 'HMAC-SHA1'
});

var app = angular.module('nounProject', []);

app.controller('apiController', function(){
  console.log("check");

  var request_data = {
      url: 'http://api.thenounproject.com/icons/fish&callback=?',
      method: 'GET'
  };

  // var token = {
  //   public: 'f5fa91bedfd5xxxxxxxxxx',
  //   secret: '84228963d5e8xxxxxxxxxx'
  // };

  $.ajax({
      url: request_data.url,
      type: request_data.method,
      data: oAuth.authorize(request_data)
  }).done(function(data) {
      console.log(data);
  });

});

我用来在 JavaScript 中访问 OAuth 的库如下:https://github.com/ddo/oauth-1.0a#client-side-usage-caution(由 DDO 提供)

谁能指导我正确的方向,或者有更好的方法通过 Angular.JS 连接到 API 的 OAuth?

提前致谢!

【问题讨论】:

    标签: javascript json angularjs api oauth


    【解决方案1】:

    正确的方式是客户端服务器oauth服务

    所有的 oauth 步骤都应该在您的服务器端。

    为什么?简单的答案是您不能在客户端隐藏您的秘密消费者/令牌。

    【讨论】:

    • 我想知道这有什么用,我和 OP 有同样的问题。这是如何解决的?
    【解决方案2】:

    我在让客户端工作时遇到了同样的问题,原件在这里No Authentication Pop up with Tumblr Like <a> link:但我只是为了方便起见重新发布它..

    找到答案了!

    所以让我为大家分解一下。我只是要总结一下我在破解 Tumblr API 时发现的所有问题和注意事项。在大多数情况下,您不会在互联网上找到任何这些答案。如果你这样做了,它们很可能只是我对我在论坛上发布的问题的回答。

    Tumblr 应用程序由任何由 Tumblr 托管或不使用 Tumblr API 的页面模板定义。应用程序必须在 Tumblr 注册:https://www.tumblr.com/oauth/apps

    所有 Tumblr 应用程序在创建时都会获得一组用于访问 Tumblr API 的密钥。 OAuth Consumer Key 又名 API Key Secret Key

    Tumblr API 主要分为两种不同类型的方法。第三个是“Tagged”,用于从博客或用户中提取已标记的帖子。

    只需要提交消费者密钥的“博客方法”。 “用户方法”需要符合 OAuth 1.0a 协议的完整 OAuth 签名请求。 “用户喜欢”一次最多返回 50 条记录。 Tumblr API 文档中没有记录。

    目前,Tumblr API 文档指导开发人员使用众多开源 API 客户端之一。但是,所有这些客户端似乎都是服务器端应用程序。对于仅支持 OAuth1 或具有显式授权的 OAuth2 的提供程序(例如 Tumblr),身份验证流程需要使用可能不会在浏览器中公开的密钥进行签名。

    HelloJS 通过使用由 oauth_proxy 定义的中间 Web 服务解决了这个问题。该服务从数据库中查找密钥并执行配置 access_token 所需的握手。在 OAuth1 的情况下,Web 服务还会对后续的 API 请求进行签名。

    HelloJS - http://adodson.com/hello.js/ 是唯一可用且免费的客户端 Oauth 库。有许多服务按每个 api 命中收费以充当代理。 HelloJS OAuth 代理位于:https://auth-server.herokuapp.com/

    使用以下社交帐户凭据之一登录 OAuth 代理:Google、Windows Live、Facebook 或 Yahoo。 OAuth 代理充当安全的“中间人”,允许安全存储“密钥”,同时仍允许客户端 OAuth 身份验证。

    HelloJS 有一个特殊的 Tumblr 模块 - http://adodson.com/hello.js/demos/tumblr.html

    HelloJS 利用新的 Javascript Promises 异步函数规范 - https://www.promisejs.org/

    在传递从异步 AJAX 调用接收到的对象时,Javascript Promises 有一些独特的规则。一切都在回调中完成。 jQuery 所说的 Promise 实际上与其他人所说的 Promise 完全不同。希望这对未来的 Tumblr 集成有所帮助。

    约翰

    【讨论】:

    • 嗨,John,多亏了你,我才能够让 OAuth 正常工作,并设法登录到 Tumblr 并从 127.0.0.1 获取访问令牌。但是,我无法使用 hello('tumblr').api('blog/myblog.tumblr.com/post', 'post', {...}) 提交帖子——它正在返回此回复:{"meta":{"status":401,"msg":"Unauthorized"},"response":[]}——有什么想法吗?
    猜你喜欢
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2018-05-31
    • 2017-02-17
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多