标签: http-status-code-401

Chrome 忽略 HTTP WWW 验证领域

我们的网络应用程序具有用户/密码身份验证。它在 Web 服务器上运行,该服务器本身通过 HTTP 基本身份验证进行保护。这只是一个临时解决方案/解决方法。Web 应用程序的身份验证将来就足够了,但目前 Web 服务器基本身份验证根本阻止访问 Web 应用程序。

如果未在应用程序级别进行身份验证,Web 应用程序将返回状态代码 401。标WWW-Authenticate头定义了不同的领域,因此浏览器不会在 Web 服务器和 Web 应用程序身份验证之间混淆:如果我们没有定义不同的领域,则一旦应用程序的 401 到达,浏览器就会丢弃 Web 服务器凭据。

到目前为止,一切都很好。然而,我们的应用程序有自己的身份验证对话框。对于 XHR 请求,我们希望自己处理 401 状态,并且需要阻止浏览器的内部基本身份验证窗口。有一个简单的技巧:只需调整身份验证标头 ( WWW-Authenticate) 即可使用自定义身份验证方法:

WWW-Authenticate: CustomBasic realm="myapp"
Run Code Online (Sandbox Code Playgroud)

Web 服务器返回:

WWW-Authenticate: Basic realm="webserver"
Run Code Online (Sandbox Code Playgroud)

这适用于 Firefox,但不适用于 Chrome。Chrome 在使用时会忽略领域CustomBasic,并丢弃领域“webserver”的凭据(用户/密码),就好像我们根本没有定义领域“myapp”一样。

你知道为什么吗?您是否知道满足以下要求的解决方案:

  • 保持两个领域的 401 状态
  • 不要在应用程序级别显示浏览器的基本身份验证窗口(特别是对于 XHR 请求)

是的,我知道我们可以通过在应用程序级别使用不同的 HTTP 状态代码并分别处理它们来简单地解决此问题。但如果可能的话,我想保留正确的状态代码 401。这也可能是一个有效的用例,例如,如果您有两个可通过同一主机上的两个不同 URL 路径访问的 Web 应用程序。

authentication webserver http basic-authentication http-status-code-401

7
推荐指数
1
解决办法
2007
查看次数

PHP Digest auth,注销

有没有办法注销在php中完成的摘要认证.

我试过unset($ _ SERVER ["PHP_AUTH_DIGEST"]); 但它不会要求重新登录.我知道如果我关闭浏览器然后它将工作,这是我的功能.

    function login(){
        $realm = "Restricted area";
        $users = array("jamesm"=>"");
        if (empty($_SERVER["PHP_AUTH_DIGEST"])) {
            header("HTTP/1.1 401 Unauthorized");
            header("WWW-Authenticate: Digest realm=\"{$realm}\",qop=\"auth\",nonce=\"".uniqid()."\",opaque=\"".md5($realm)."\"");
            return false;
        }
        if (!($data = http_digest_parse($_SERVER["PHP_AUTH_DIGEST"])) || !isset($users[$data["username"]]))
            return false;
        $A1 = md5($data["username"] . ":{$realm}:{$users[$data["username"]]}");
        $A2 = md5($_SERVER["REQUEST_METHOD"].":{$data["uri"]}");
        $valid_response = md5("{$A1}:{$data["nonce"]}:{$data["nc"]}:{$data["cnonce"]}:{$data["qop"]}:{$A2}");
        if ($data["response"] != $valid_response)
            return false;
        return true;
    }
    function logout(){
        unset($_SERVER["PHP_AUTH_DIGEST"]);
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

我还需要添加到注销功能以完成此操作.

如果我改变了它的作用,但我不希望它被改变.

php security logout digest-authentication http-status-code-401

6
推荐指数
2
解决办法
1万
查看次数

IIS仅在特定文件夹上请求登录凭据

我在IIS 7上有一个有几个子文件夹的站点.该站点使用.net 2构建,并以集成模式在池中运行.

除了名为"Reports"的文件夹下的所有aspx文件外,整个站点的工作方式都很完美.当用户试图访问该文件夹下的任何aspx页面时(即http://domain/Reports/page1.aspx),他得到401响应并且浏览器提示输入用户和密码.

远程和本地访问站点时会发生这种情况.在尝试查看IIS日志文件时,请求未被列出,就好像它被某些东西阻止一样.

我已经完成了以下测试以尝试解决此问题:

  1. 我已将文件夹重命名为R1,然后我可以访问它上面的任何页面
  2. 我已经采取了另一个工作文件夹并将其重命名为Reports,然后无法访问其中的任何文件
  3. 我已经反复重置权限而没有成功
  4. 我考虑过请求过滤,但我看不到包含单词"Reports"的URL的过滤器.我们还没有设置任何过滤器,所以我应该在默认的IIS设置上工作
  5. 我创建了一个简单的html文件,但也无法访问它.再次401错误

似乎IIS只是不喜欢名为"Reports"的文件夹.关于我在这里失踪的任何想法?

permissions iis-7 http-status-code-401

6
推荐指数
1
解决办法
2277
查看次数

失败的登录尝试是否会导致http 401响应

失败的登录尝试是否会导致HTTP 401响应?似乎并非所有主要网站都这样做.

authentication http-status-code-401

6
推荐指数
1
解决办法
2802
查看次数

使用401发送消息:Asp.net Web-api

我在asp.net web API中.在登录方法中,我检查数据库的用户/密码,如果它们不匹配,我会返回401状态代码和invalid user or password methodlike

var content = new StringContent("Invalid user name or password");
var message = new HttpResponseMessage(HttpStatusCode.Unauthorized);
message.Content = content;
throw new HttpResponseException(message);
Run Code Online (Sandbox Code Playgroud)

但API似乎忽略了我的消息,只是简单地返回一些HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc http-status-code-401 asp.net-mvc-4 asp.net-web-api

6
推荐指数
1
解决办法
2971
查看次数

rails专门针对特定页面设计401

我无法辨别为什么我的应用程序返回401 Unauthorized.我的机构控制器中的其他操作在没有登录的情况下正常工作.但是,这个和另一个页面返回401.如果登录,这些页面工作得非常好,但它们不应该要求登录.我甚至已经这样做了至于清空视图和动作,但页面仍然返回401.当通过fiddler调试时,我只是收到302重定向.

我尝试过在其他地方进行研究,并尝试过Warden认证的解决方案,召回401 Unauthorized但没有成功.

安慰

Started GET "/institutions/3" for 127.0.0.1 at 2013-04-25 14:38:15 -0400
    Processing by InstitutionsController#show as HTML
      Parameters: {"id"=>"3"}
      ?[1m?[36mInstitution Load (0.0ms)?[0m  ?[1mSELECT `institutions`.* FROM `institutions` WHERE `institutions`.`id` = 3 LIMIT 1?[0m

Load data...
Load assets...
Run Code Online (Sandbox Code Playgroud)

然后我提交表单,方法设置为GET

Started GET "/visit/schedule/preview?utf8=%E2%9C%93&selected_ids=4693" for 127.0.0.1 at 2013
-04-25 14:28:53 -0400
Processing by InstitutionsController#previewselectedvisits as HTML
  Parameters: {"utf8"=>"?", "selected_ids"=>"4693"}
Completed 401 Unauthorized in 0ms

Started GET "/users/sign_in" for 127.0.0.1 at 2013-04-25 14:28:53 -0400
Processing by Devise::SessionsController#new as HTML …
Run Code Online (Sandbox Code Playgroud)

devise http-status-code-401 warden ruby-on-rails-3

6
推荐指数
1
解决办法
2万
查看次数

401未经授权的错误web api mvc windows身份验证

我收到401未经授权的错误.我的网络服务是用mvc编写的.在IIS中配置为使用Windows身份验证.下面是小提琴手的截屏 在此输入图像描述

当我从浏览器点击URL时,它会弹出窗口输入用户名和密码.如何避免弹出窗口?

我从另一个窗口服务调用这个web api.

c# iis-7 http-status-code-401 asp.net-web-api

6
推荐指数
1
解决办法
2万
查看次数

NGINX基本身份验证 - 在401身份验证错误时重定向到主页

如果身份验证失败,我想再次重定向到我的主页,因为即使您按取消并且甚至没有尝试进行身份验证,身份验证也会失败,并且会从ngnix进行基本身份验证.

如果我按照屏幕截图中显示的方式进行操作,则只需加载页面; 所以重定向工作,但身份验证和其他页面的访问不再显示.你知道我能尝试的其他事吗?

在此输入图像描述

authentication configuration nginx basic-authentication http-status-code-401

6
推荐指数
0
解决办法
893
查看次数

使用 WebClient 调用授权的 Web API

经过几个小时的互联网搜索,我决定向你们寻求帮助。

我已经用几个简单的 get/post 方法编写了一个 Web API。我正在使用个人用户帐户身份验证方法。

使用 HttpClient,我成功地调用了每个 AUTHORIZED get 和 post 方法以及用于生成授权令牌的 /token 端点。

问题是我必须在 .NET Framework 3.5 项目中调用这些方法。因此,我尝试使用 WebClient 来执行此操作,因为我了解到 .NET Framework 3.5 不支持 HttpClient。

GetAPIToken() 方法生成不记名令牌并且它有效。

 private static string GetAPIToken(string userName, string password, string apiBaseUri)
    {
        using (WebClient client = new WebClient())
        {
            client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            var response = client.UploadString(apiBaseUri + "/Token", "POST", "grant_type=password&username=" + userName + "&password=" + password);
            var jObject = JObject.Parse(response);
            return jObject.GetValue("access_token").ToString();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我从 Web API 中删除 [Authorize] 属性时,此 GET 方法有效,但在获得授权后无法使其工作。

    //GET ODRA?ENI …
Run Code Online (Sandbox Code Playgroud)

api webclient token unauthorized http-status-code-401

6
推荐指数
0
解决办法
4378
查看次数

Spring Boot 2.0.3 Oauth2 安全性:即使在标头中使用访问令牌时也会出现 401 错误

我正在创建一个 spring boot 2.0 应用程序并尝试启用 oauth2 安全性。到目前为止,我在同一个应用程序中拥有身份验证服务器和资源服务器。我的客户端和用户详细信息以及生成的令牌保存在数据库 (mysql) 中,并且数据库架构与 spring 文档提供的相同。当我使用 Postman 在标头中提供 clientId 和 clientSecret 并在正文中提供用户凭据时,当我点击“/oauth/token/”端点时,我成功获取了访问令牌。

{
"access_token": "bef2d974-2e7d-4bf0-849d-d80e8021dc50",
"token_type": "bearer",
"refresh_token": "32ed6252-e7ee-442c-b6f9-d83b0511fcff",
"expires_in": 6345,
"scope": "read write trust"
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用此访问令牌访问我的 rest api 时,我收到 401 Unauthorized 错误:

{
"timestamp": "2018-08-13T11:17:19.813+0000",
"status": 401,
"error": "Unauthorized",
"message": "Unauthorized",
"path": "/myapp/api/unsecure"
}
Run Code Online (Sandbox Code Playgroud)

我正在使用的其余 API 如下:

http://localhost:8080/myapp/api/unsecure

http://localhost:8080/myapp/api/secure

myapp 是我的应用程序的上下文路径。

对于“安全”api,我在请求标头中提供了访问令牌,如 Spring 文档中所述:

Authorization: Bearer bef2d974-2e7d-4bf0-849d-d80e8021dc50
Run Code Online (Sandbox Code Playgroud)

而对于不安全的 api,我已经尝试过使用和不使用 Authentication 标头。在所有情况下,我都收到了两个 api 的相同错误。

此外,当我尝试打印当前经过身份验证的用户时,它会被打印为匿名用户。

我想要的是如下:

1)我希望只有在请求标头中提供访问令牌时才能访问我的安全 api。

2) 我希望未经授权的用户可以访问我的不安全 api。

3) 我应该在访问安全 url 时使用 …

java http-status-code-401 spring-boot spring-security-oauth2

6
推荐指数
1
解决办法
1万
查看次数