当前位置: 首页 > 知识库问答 >
问题:

angularjs:$http基本身份验证

房时铭
2023-03-14

我尝试了angular.js,并从一个restful api的web-ui开始(使用超文本传输协议基本授权)。这真的很好,除了授权工作。

到目前为止,我使用的是$http。默认值。标题。常见的授权设置密码,但大多数情况下浏览器会打开http basic auth的默认登录表单。另一个奇怪的行为是angular请求不包含授权头(选项和GET请求都不包含)。我还尝试使用header配置在每个请求上设置此header,但这也不起作用。

有一些特殊的标题我必须设置吗?或者我必须设置$http。默认值。标题。常见的在特殊情况下授权

tools.factory('someFactory', function ($http, Base64) {

  //...

  factory.checkAuth = function (username, password) {
    storeCredentials(username, password);
    factory.initConnection();
    return factory.getData();
  };

  factory.initConnection = function(){
    var credentials = loadCredentials();

    factory.authHeader = 'Basic ' + Base64.encode(credentials.username + ':' + credentials.password);

    $http.defaults.headers.common.Authorization = factory.authHeader;
  };

factory.getData = function () {
    return $http({
      method: 'GET',
      url: urlBase + '/happening',
      headers: {
      //  'Authorization': factory.authHeader
      }
    });
  };

选项 /v8/happeningHTTP/1.1
主机:api.gospry.com
连接:保活访问控制请求方法:GET
起源:http://web.gospry.com
用户代理:[...]访问-控制-请求-报头:接受,授权
接受:*/*
引用:http://web.gospry.com/
接受-编码:gzip,收缩,sdch
接受-语言:en-US, en; q=0.8

后端稍作修改以支持CORS(访问控制头和飞行前请求支持)。

HTTP/1.1 401未经授权的
服务器:Apache Coyote/1.1
访问控制允许来源:http://web.gospry.com
访问控制允许方法:POST、GET、PUT、PUSH、OPTIONS、DELETE
访问控制最大年龄:3600
访问控制允许标题:来源、X-request-With、内容类型、授权
X-Content-Type-OPTIONS:nosniff
X-XSS-Protection:1;模式=块
缓存控制:无缓存,无存储,最大年龄=0,必须重新验证
Pragma:无缓存
过期:0
严格的传输安全:最大年龄=31536000;includeSubDomains
X-Frame-Options:DENY
设置Cookie:JSESSIONID=2ddc92a1b0dc57c21cdc3b7a5dc1314;路径=/v8/;保护HttpOnly
WWW-Authenticate:Basic realm=“realm”
X-Content-Type-Options:nosniff
缓存控制:无缓存,无存储,最大年龄=0,必须重新验证
Pragma:no-Cache
过期:0
X-Frame-Options:DENY
允许:获取,头,发布,放置,删除,跟踪,选项,补丁
内容长度:0
日期:Wed,2015年4月8日18:04:04 GMT

共有2个答案

华展鹏
2023-03-14

您在登录表单中描述的问题将在AngularJS使用ngResource的技巧和技巧中进行解释,并提供解决方法。请参阅基本身份验证部分:

如果合适的话,一个解决方法是告诉你的网络服务器在认证失败时返回401以外的东西,然后从那里开始。在AngularJS中,500(例如)将导致$超文本传输协议被拒绝,您可以随心所欲地处理它。如果您确实需要出现登录提示,则不建议这样做!

温成济
2023-03-14

我使用拦截器。我无法在您的代码中发现问题,但我使用的是:

authModule.factory('CeradAuthInterceptor', 
['CeradAuthManager', function ( authManager) 
{
  return {
    request: function (config) 
    {
      config.headers = config.headers || {};
      if (authManager.authToken) 
      {
        config.headers.Authorization = 'Bearer ' + authManager.authToken;
      }
      return config;
    }
  };
}]);

appModule.config(['$httpProvider', function ($httpProvider) {
  $httpProvider.interceptors.push('CeradAuthInterceptor');
}]);
 类似资料:
  • 问题内容: 我有一个现有的angularjs代码,可以进行HTTP GET。下面提取的是控制器内部的一些相关代码。 我想将HTTP基本身份验证添加到HTTP GET。用户名为,密码为。如何才能做到这一点? 问题答案: 因为在基本身份验证中,用户名和密码由base64解码。您首先需要找到一个图书馆来完成这项工作。 https://github.com/ninjatronic/angular- bas

  • 问题内容: 因为在AngularJS中使用CORS和http身份验证可能会比较棘手,所以我编辑了问题以分享一个经验教训。首先,我要感谢igorzg。他的回答对我很有帮助。场景如下:您想使用AngularJS $ http服务将POST请求发送到另一个域。获取AngularJS和服务器设置时,需要注意一些棘手的事情。 第一:在您的应用程序配置中,您必须允许跨域调用 第二:您必须指定withCrede

  • 问题内容: 我想写书,所使用的一个一个的NodeJS REST的API服务器Joyent的,并且一切正常,除了我无法验证普通用户的身份验证。如果我跳到终端并执行,则无法在NodeJS http服务器上获取值username:password。如果我的NodeJS http服务器类似于 ,是否应该在来自回调的 req 对象中某处获取值username:password ?如何获得这些值而不必使用Co

  • 问题内容: 如何在Golang网站上实施基本身份验证?这样,当有人访问某个页面时,他们的 浏览器 会提示他们登录。 问题答案: 为了强制用户进行身份验证/在用户浏览器中显示基本身份验证提示,请发送标头 因此,如果您有通话,您可以 这将导致浏览器打开您所指的提示。

  • 问题内容: 以下代码成功连接到我的Ruby on Rails API,并使用AFNetworking返回JSON。我需要做什么来进行编辑以传递用户名和密码,以便我的API可以使用HTTP基本身份验证? 我已经阅读了他们的文档,但是我对Objective-C和AFNetworking还是陌生的,目前还没有意义。 问题答案: AFNetworking 2.x的答案已更新 对于AFNetworking

  • 我不熟悉RESTful API的概念。 我正在为一家在线商店设计一个RESTful API。 我没有正确理解SSL上的基本HTTP身份验证的概念。 这是否意味着对于每个请求,用户都必须再次输入他/她的用户名和密码? 有人能详细解释它的功能和用途吗?