我有一个部署到Azure的网站。我使用Cloudflare来为Azurewebsites域设置CNAME,因此将重定向URL设置为Cloudflare托管的域名为:
https://www.example.com/signin-microsoft
尝试登录时,我失败了,Microsoft提供的链接是:
https://login.live.com/err.srf?lc=1033#error=invalid_request&error_description=The+provided+value+for+the+input+parameter+'redirect_uri'+is+not+valid.+The+expected+value+is+'https://login.live.com/oauth20_desktop.srf'+or+a+URL+which+matches+the+redirect+URI+registered+for+this+client+application.&state=xxx
运行Fiddler时,我可以看到我的应用程序通过的重定向URL不是https://www.example.com,而是以下内容:
/common/oauth2/v2.0/authorize?client_id=f0caa31c-3117-4479-a284-65f5a38ff5b6&scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read&response_type=code&redirect_uri=https%3A%2F%2Fexample.azurewebsites.net%2Fsignin-microsoft
在我的应用中设置Microsoft OAuth时,我具有以下设置,但找不到用于覆盖重定向URL的设置:
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ApplicationId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:Password"];
});
有人有什么建议吗?为了使事情复杂化,我具有以下结构:
答案 0 :(得分:1)
您可以通过使用instructions here检查应用程序AAD答复URL来仔细检查重定向URL是否正确。这必须与您在请求中发送的内容完全匹配。如果要花费几分钟才能传播更新,请在更新此设置后花一些时间来解决错误。
我能够使用与answer in this question类似的策略来覆盖重定向uri。
.AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["AzureAd:AppId"];
microsoftOptions.ClientSecret = Configuration["AzureAd:Password"];
microsoftOptions.AuthorizationEndpoint = Configuration["AzureAd:AuthEndpoint"];
microsoftOptions.CallbackPath = "/signin-oidc";
microsoftOptions.Events.OnRedirectToAuthorizationEndpoint = context =>
{
context.Response.Redirect(Regex.Replace(context.RedirectUri, "redirect_uri=(.)+%2Fsignin-oidc", "redirect_uri=https%3A%2F%2Fwww.yourcustomdomain.com%2Fsignin-oidc"));
return Task.FromResult(0);
};
});
答案 1 :(得分:0)
问题是由于CloudFlare's CNAME flattening与Azure的CNAME verification
之间存在冲突。 CNAME展平实质上返回A记录,这可以加快DNS解析速度,并且通常是个好主意。但是,Azure的CNAME验证仅验证CNAME记录。
我发现最好的解决方法是:
1。禁用CloudFlare的HTTP代理(单击该CNAME记录上的橙色云,使其变为灰色);这也会禁用该记录的CNAME拼合。
2。在挖掘时检查主机,直到看到CNAME记录显示。
3。在Azure门户上验证您的CNAME主机。
4。重新启用CloudFlare的HTTP代理(单击该CNAME记录上的灰色云,使其变为橙色)。
这使您可以在Azure上进行验证,并且仍然利用CloudFlare的CDN。
有关更多详细信息,您可以参考此article。