代码之家  ›  专栏  ›  技术社区  ›  gaurav5430

角度HTTP身份验证:未获取浏览器登录提示

  •  2
  • gaurav5430  · 技术社区  · 9 年前

    在我的角度应用程序中,我尝试进行基本的HTTP验证。

    我最初在没有任何凭证的情况下从angle发送http-get请求,因为我假设当后端发送401状态时,浏览器会要求我提供凭证,然后自己重新提交请求。

    但从不显示浏览器登录提示。 这是我得到的错误:

    angular.js:11756 GET http://localhost:8080/appName/rest/keys/Keys?batch=0&userName=Test 401 (Unauthorized)
    

    以下是我得到的响应标题:

    Access-Control-Allow-Credentials:true
    Access-Control-Allow-Headers:origin, content-type, accept, authorization
    Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS, HEAD
    Access-Control-Allow-Origin:http://localhost:3001/
    Content-Length:0
    Date:Tue, 09 Aug 2016 14:53:26 GMT
    Server:Apache-Coyote/1.1
    WWW-Authenticate:Basic
    

    我希望浏览器提示在遇到状态401时会自动出现,但这里似乎不是这样。我错过了什么吗?

    编辑:

    它在Chrome和Firefox中不起作用,但在IE中起作用。当我尝试访问url时,IE会显示登录提示,并且可以正确使用用户名和密码,而Chrome会直接给出401错误。

    如果我尝试直接从地址栏访问服务器url,那么Chrome会显示登录提示并要求我输入凭据。 不确定,但这可能是CORS问题吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   gaurav5430    9 年前

    这个问题确实与CORS有关,而不是直接的。

    缺少两件事:

    最初我正在发送(以及其他邮件头) Access-Control-Allow-Origin : * 然后我才知道:

    Access Control Allow Origin标头。对于具有身份验证的服务器, 这些浏览器不允许在标题中使用“*”。这个 Access Control Allow Origin标头必须包含 客户端传递的源标头。

    https://www.webdavsystem.com/ajax/programming/cross_origin_requests/

    然后出现了与跨源浏览器身份验证相关的问题:

    默认情况下,在跨站点XMLHttpRequest调用中,浏览器将 不发送凭据。必须在 调用时的XMLHttpRequest对象。

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials

    此特定标志是 withCredentials : true ,需要使用xhr请求进行设置。我设法用我从angular应用程序发出的http请求来设置它,瞧,它成功了!