相关疑难解决方法(0)

CORS预检请求返回带有Windows身份验证的HTTP 401

我在谷歌和Stack溢出搜索了很多,为我的问题找到了解决方案,但没有任何效果.

这是我的问题:

  • 我使用IIS 7和一个名为WebDEV的特殊编程环境,它不允许直接操作OPTIONSHTTP方法.因此,所有使用代码建议某种服务器端请求处理的解决方案都是不可行的.

  • 我必须使用Window身份验证并禁用匿名访问

  • 我有一个页面使用CORS POST到此服务器.正如此POST应该具有的那样Content-type: Octet-stream,浏览器会发出预检.

  • 当我启用匿名访问时,一切正常(CORS已配置好)

  • 当我禁用匿名访问时,服务器会回复HTTP 401对预检请求的未授权响应,因为它不包含凭据信息.

  • 我试图为IIS写一个接受这样的OPTIONS请求的模块,但是它没有用(无法将模块正确地添加到IIS)

    public class CORSModule : IHttpModule
       {
    
              public void Dispose() { 
              }
    
              public void Init(HttpApplication context)
              {
                   context.PreSendRequestHeaders += delegate
                   {
                      if (context.Request.HttpMethod == "OPTIONS")
                       {
                             var response = context.Response;
                             response.StatusCode = (int)HttpStatusCode.OK;
                       }
                   };
              }
        } 
    
    Run Code Online (Sandbox Code Playgroud)

问题是:如何在不启用匿名访问或编写某些服务器端代码的情况下,使用HTTP 200响应预检请求?是否有一个简单的配置或现成的模块供IIS使用?至少,将上述模块安装到IIS 7中的具体步骤是什么?

iis windows-authentication cors preflight

9
推荐指数
2
解决办法
2718
查看次数

用于PUT和POST的Angular4 ASP.NET Core 1.2 Windows身份验证CORS提供401

我的IDE是Visual Studio 2017.我有一个Angular4客户端与Core中的WebAPI后端通信,而CORS正在为PUT和POST方法配置EXCEPT.GET方法在Chrome中使用与PUT和POST方法相同的预检OPTIONS方法,但GET工作正常.

Visual Studio中的IIS Express服务器似乎没有将请求转发到Kestrel服务器.两种方法都适用于Postman,但是当Angular4进行调用时则不行.这是代码:

Angular4 POST

post(api: string, object: any): Observable<any> {
        let body = JSON.stringify(object);

        let options = new RequestOptions({
            headers: this.headers,
            withCredentials: true
            });

        return this.http.post(this.server + api, body, options)
            .map((res: Response) => res.json())
            .catch((error: any) => Observable.throw(error.json().error) || 'Post server error');
    }
Run Code Online (Sandbox Code Playgroud)

Startup.cs配置

services.Configure<IISOptions>(options => 
     options.ForwardWindowsAuthentication = true);

services.AddCors(options => {
            options.AddPolicy("AllowAll", builder => {
                builder.WithOrigins("http://localhost:XXXX")
                .WithMethods("GE??T", "POST", "PUT", "DELETE", "OPTIONS")
                .WithHeaders("Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization")
                .AllowCredentials();
            });
        });
Run Code Online (Sandbox Code Playgroud)

Startup.cs ConfigureServices

app.UseCors("AllowAll");
Run Code Online (Sandbox Code Playgroud)

Project中的IIS ApplicationHost.Config

<anonymousAuthentication …
Run Code Online (Sandbox Code Playgroud)

.net iis asp.net-core-webapi angular

8
推荐指数
3
解决办法
5590
查看次数

如何在 Azure 应用服务上配置 CORS

前言:我知道一般意义上这是如何完成的,我的问题是如何在 Azure 应用服务上最好地设置它

a) 在 Azure 应用服务托管的 Rest 服务(应用程序#1)上的 CORS 配置在哪里完成?是否是通过 C# 代码的传统方式,例如 config.EnableCors(); 或者也可以通过 Azure Portal 魔法来完成?

b) 如果客户端应用程序 (App-#2) 托管在(另一个)Azure 应用服务上,则在哪里可以找到将在 Ajax 调用中发送到 App-#1 的外部 IP 地址?

windows azure-web-app-service

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

具有Windows身份验证的.Net Core WebAPI CORS

我有一个.Net Core WebAPI服务,已在项目的属性中启用了CORS(使用下面的代码),我禁用了匿名身份验证并启用了Windows身份验证。POST和PUT端点在启用匿名身份验证的情况下工作,但在禁用匿名身份验证时失败。我懂了

OPTIONS http://localhost:64113/api/ 401 (Unauthorized)
Run Code Online (Sandbox Code Playgroud)

启用CORS的代码

        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.WithOrigins("http://localhost:3000")
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
        });
Run Code Online (Sandbox Code Playgroud)

角度代码

    public XXX(data: any): Observable<Response> {
    return this.http.put(this.baseUrl, data,
        { withCredentials: true });
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何经验?

谢谢

asp.net-web-api asp.net-core-webapi angular

4
推荐指数
1
解决办法
841
查看次数

ASP.NET Core:带有 OPTIONS 异常的 Windows 身份验证(CORS 预检)

我正在开发一个单页网络应用程序。它具有ASP.NET Core 3后端和Angular 9前端。我在 Visual Studio 中的 IIS Express 上运行后端,网址为http://localhost:59280。前端在 Visual Studio Code 中运行,使用ng servehttp ://localhost:4200。之前我不需要在后端开启 CORS,因为我只在 Chrome 中测试了应用程序,添加--disable-web-security命令行参数就足以关闭同源策略。在实时服务器上不需要 CORS,上述跨域情况仅发生在我的开发机器上。

现在我想在 Firefox 中调试前端,但由于无法关闭 Firefox 的同源策略,所以我必须在后端打开 CORS。不幸的是,它不起作用,因为我使用 Windows 身份验证,并且它会停止默认未经身份验证的CORS 预检请求如果我可以在没有 Windows 身份验证的情况下处理 HTTP OPTIONS 请求,则可以解决此问题。我认为这可以通过在web.config中添加类似的内容来完成:

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" />
    </authentication>
    <authorization>
      <add accessType="Allow" verbs="OPTIONS" users="*" />
    </authorization>
  </security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

...但我收到一条错误消息:“此配置节不能在此路径上使用。当该节被锁定在父级别时,就会发生这种情况。” 显然 web.config 与launchSettings.json冲突,后者似乎在 Visual Studio 中的 IIS Express 上运行后端时控制身份验证,使用以下两行:

{
  "iisSettings": …
Run Code Online (Sandbox Code Playgroud)

same-origin-policy cors preflight asp.net-core angular

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