繁体   English   中英

如何使用javascript连接到oAuth 1.0a的API? [Angular.js]

[英]How to connect to a API with oAuth 1.0a using javascript? [Angular.js]

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

有问题的API,我正在使用名词项目 ,需要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提供)

任何人都可以指导我朝正确的方向发展,或者有更好的方法将OAuth连接到使用Angular.JS的API吗?

提前致谢!

正确的方法是客户端< - >服务器< - > oauth服务

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

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

我遇到了同样的问题,让客户端工作,原来在这里没有身份验证弹出Tumblr喜欢<a>链接 :但我只是重新发布它以方便..

找到答案!

所以,让我为大家分解一下。我只是要记下在我攻击Tumblr API时发现的所有问题和警告。 在大多数情况下,您不会在内部网上找到任何这些答案。 如果你这样做,他们很可能只是我对我发布在论坛上的问题的答案。

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

创建后的所有Tumblr应用程序都会获得一组用于访问Tumblr API的密钥。 OAuth使用者密钥又称API密钥密钥

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

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

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

HelloJS通过使用oauth_proxy定义的中间webservice解决了这个问题。 此服务从数据库中查找秘密并执行配置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/

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

约翰

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM