预检请求将忽略处理.NET Core 2.1中的中间件

时间:2018-10-31 12:24:46

标签: cors asp.net-core-2.0

我想授权用户使用Azure AD。我使用

添加了对此的支持
$q = intval($_GET['q']);

执行我自己的Sign In方法时,由于authenticate方法,它会重定向到并使用适当的参数调用services.AddAuthentication(AzureADDefaults.AuthenticationScheme) .AddAzureAD(options => Configuration.Bind("AzureAd", options)); 。问题是浏览器告诉我由于以下原因无法读取响应:

  

无法加载https://login.microsoftonline.com/ {tenant_id} / oauth2 / authorize?client_id = {client_id}&scope = openid%20profile&response_type = code&redirect_uri = https%3A%2F%2Flocalhost%3A44353%2Fapi%2Fmicrosoft-callback&state = {state }:对预检请求的响应未通过访问控制检查:所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ https://localhost:44353”。

我尝试通过允许Startup中的所有来源并添加自定义中间件来与CORS一起玩,但是预检请求似乎实际上忽略了所有中间件。在https://login.microsoftonline.com的开头,我一直在使用Use/AddCors和提到的中间件。

如果我使用以下Configure(Services)选项运行Chrome,浏览器将不会发送OPTION请求,而只会发送GET请求,并且需要这种行为。

是否有机会在asp.net核心应用程序中向预检请求添加自定义标头?

@UPDATE

要创建项目,可以使用chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security命令。我唯一要做的就是创建一个新的api控制器:

dotnet new mvc --auth SingleOrg --client-id <CLIENT_ID_(APP_ID)> --tenant-id <TENANT_ID> --domain <TENANT_DOMAIN>

要测试授权过程,您必须清除所有cookie,然后在浏览器的控制台中运行以下命令:

[Authorize]
[ApiController]
[Route("/api/test")]
public class TestController : Controller
{
    [HttpPost]
    public string Post(string test)
    {
        return test;
    }

    [HttpGet]
    public string Get()
    {
        return "";
    }
}

由于CORS导致请求均失败,而原始请求在应用程序开始时就通过了。

为澄清起见:在var xhttp = new XMLHttpRequest(); xhttp.open("GET", "/api/test", true); xhttp.send(); xhttp.open("POST", "/api/test", true); xhttp.send();

中同时添加services.AddCors();
ConfigureService
app.UseCors(builder => { builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin(); }); 方法中的

不会影响重定向导致的请求。

0 个答案:

没有答案