我想授权用户使用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();
});
方法中的不会影响重定向导致的请求。