1

是否可以使用带有以下代码段的基本身份验证向本地运行的站点发出简单的发布请求?

app.controller('post', function($scope, $http) {


$http.post("http://localhost:8888/angular//wp-json/posts", {'title':'Posting from Angular'})
.success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available

document.getElementById("response").innerHTML = "It worked!";
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.

document.getElementById("response").innerHTML= "It did not work!";
alert(status)
});

}); 
4

1 回答 1

2

当您说基本身份验证时,您是指 HTTP 基本身份验证吗?

如果这就是你的意思:那么不。HTTP 基本身份验证要求您的客户端(在本例中为您的 Web 浏览器)需要知道您的 API 密钥并能够通过网络将它们发送到您的服务器。由于您在 Web 浏览器中运行 Angular,这意味着任何访问您网站的用户理论上都可以通过检查浏览器的 Javascript 控制台以纯文本形式查看您的 API 凭据。

这是一个巨大的安全风险。

你想要做的是使用像 OAuth2 这样的协议和密码授权(更多信息在这里:https ://stormpath.com/blog/token-auth-spa/ )。

OAuth2 允许您基本上做到这一点:

  • 让用户使用用户名/密码登录您的应用程序。
  • 登录成功后,将返回一个令牌并将其存储在从 JAVASCRIPT 隐藏的 Web 浏览器 cookie 中。
  • 然后您可以使用 Angular POST 到您的 API 服务,因为浏览器会自动在 HTTP 授权标头中附加相关的令牌 API 凭据。
  • 然后,您的服务器可以从 HTTP 授权标头中获取令牌,并以这种方式验证凭据。

这是从浏览器访问经过身份验证的 API 服务的唯一安全方式。

于 2015-07-06T16:18:06.700 回答