覆盖AddMicrosoftAccount()标识OAuth for ASP.NET Core Web app中的重定向URL

问题描述 投票:0回答:2

我有一个部署到Azure的网站。为了CNAME azurewebsites域名,我使用了Cloudflare,因此将重定向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时,我有这些设置,但我找不到覆盖redirect-url:

services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
    microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ApplicationId"];
    microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:Password"];
});

有没有人有什么建议?为了使问题复杂化,我有这样的结构:

  • CloudFlare的
  • Azure CDN
  • Azure Web应用程序
azure asp.net-core-mvc azure-web-sites cloudflare azure-cdn
2个回答
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);
            };
        });

0
投票

问题是由于CloudFlare's CNAME flattening和Azure的CNAME verification之间的冲突。 CNAME展平实质上返回A记录,这加快了DNS分辨率,一般来说是个好主意。但是,Azure的CNAME验证仅验证CNAME记录。

我发现最好的解决方法是:

1.Disable CloudFlare的HTTP代理(单击该CNAME记录上的橙色云,使其变为灰色);这也会禁用该记录的CNAME展平。

2.在挖掘中检查您的主机,直到您看到CNAME记录显示为止。

3.在Azure门户上验证您的CNAME主机。

4.重新启用CloudFlare的HTTP代理(单击该CNAME记录上的灰色云,使其变为橙色)。

这允许您在Azure上进行验证,并仍然可以利用CloudFlare的CDN。

有关更多详细信息,请参阅此article

© www.soinside.com 2019 - 2024. All rights reserved.