Tag: http status code 401

默认情况下发送BASIC auth,而不是等待HTTP 401

我有一个Web服务,要求BASIC身份validation标头出现在请求中,否则服务将返回HTTP 401(未经授权)。 这样做 – 当挑战回来时,浏览器(在这种情况下,Chrome)弹出并要求提供凭据。 然后保存它们以备将来请求。 我的问题是,现在对服务的每个后续请求都有两个请求 – 一个没有auth(接收401),然后浏览器立即在头中回复正确的auth。 有没有办法强制浏览器(可能通过一个特殊的标题)提供凭据,而不必每次都被Web服务明确询问?

在asp.net Web Api中处理未经身份validation的请求的最佳方法

我有一个带有Web Api 2的标准VS2013 MVC5项目。 标准项目的设计方式,如果请求未经过身份validation, [Authorize]属性只返回401状态代码,而完全独立的模块会嗅探任何401代码,暂停它们,而是将302重定向发送到登录页面在Startup.Auth.cs文件中指定。 这对于Mvc控制器来说没问题,但是对于Web Api控制器来说真的很糟糕,因为例如浏览器会自动将ajax请求重定向到登录URL,所以即使响应文本只是登录页面的html,你最终也会得到200OK状态。 这使得编写良好的javascript变得很困难,可以区分您只需要告诉用户重新登录的情况与其他类型的错误。 理想情况下,我们应该能够根据状态代码判断,但javascript永远不会看到401状态。 处理这个问题的最佳方法是什么? 我的第一个想法是写一个授权属性,但使用状态代码403而不是401: public class ApiAuthorizationAttribute : System.Web.Http.AuthorizeAttribute { public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { if (actionContext.RequestContext.Principal.Identity.IsAuthenticated) { base.OnAuthorization(actionContext); } else { actionContext.Response = actionContext.ControllerContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, “Not signed in.”); } } } 当然, 规范明确声明403是不正确的: 授权无效,请求不应重复 我的另一个想法是,也许我应该完全禁用asp.net的401重定向模块并处理自定义授权属性中的重定向,因为即使对于Mvc视图也很糟糕,因为它不允许您重定向到不同的登录页面,具体取决于用户试图访问的网站。 还有其他更好的方法来处理这个吗?

在SSRS URL访问上有401个未经授权的错误…但它在Fiddler中有效吗?

我试图使用C#中的URL访问从SSRS报告生成pdf。 (在WebApi控制器后面的业务层中)我创建了一个HttpClient实例,分配了正确的凭据并形成了请求URL,如: HTTP://sqlserver1/ReportServer/Pages/ReportViewer.aspx /客户/ Acme的/ AcmeActivitySummary&RS:命令=渲染和RS:格式= PDF&地区=西&CutOffDate = 10 /二千〇一十五分之二十五 如果我将我的URL放在浏览器中,它会下载预期的PDF文件。 当我从HttpClient实例执行此URL以返回流时,我收到401 Unauthorized Error。 如果我打开Fiddler看看为什么……它按预期工作。 如何在不使用Fiddler的情况下完成这项工作……为什么它现在不起作用?

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

我收到401未经授权的错误。 我的网络服务是用mvc编写的。 在IIS中配置为使用Windows身份validation。 下面是小提琴手的截屏 当我从浏览器点击URL时,它会弹出窗口输入用户名和密码。 如何避免弹出窗口? 我从另一个窗口服务调用这个web api。

Exchange Web Service API和401未经授权的例外

当我尝试使用EWS API发送电子邮件时,我收到以下错误:(在message.Send(); ) 请求失败。 远程服务器返回错误:(401)未经授权。 我的代码如下: ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2007_SP1); //WebService Uri try { exchangeService.Url = new Uri(“https://exchangeserver/ews/exchange.asmx”); } catch (Exception ex) { throw new Exception(string.Format(“WebService Uri:” + ex)); } //Credentials try { exchangeService.Credentials = new WebCredentials(“user@domain”, “pwd”, “domain”); } catch (Exception ex) { throw new Exception(string.Format(“Credentials:” + ex)); } //Send a mail try […]