Переопределить URL-адрес перенаправления в удостоверении AddMicrosoftAccount () OAuth для веб-приложения ASP.NET Core - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть сайт, развернутый в Azure.Я использовал Cloudflare для CNAME домена azurewebsites и поэтому установил 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"];
});

Кто-нибудьесть предложения?Чтобы усложнить ситуацию, у меня есть такая структура:

  • Cloudflare
  • Azure CDN
  • Веб-приложение Azure

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете дважды проверить ожидаемый URL перенаправления, проверив URL ответа AAD приложения с помощью инструкций здесь .Это должно быть точное совпадение с тем, что вы отправляете в своем запросе.Если для распространения обновлений может потребоваться несколько минут, то подождите некоторое время после обновления этого параметра, чтобы устранить ошибки.

Мне удалось переопределить 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 голосов
/ 18 февраля 2019

Проблема связана с конфликтом между выравниванием CNAME CloudFlare и CNAME verification Azure.Сглаживание CNAME, по сути, возвращает записи A, что ускоряет разрешение DNS и является хорошей идеей в целом.Однако проверка CNAME Azure только проверяет записи CNAME.

Лучшее решение, которое я нашел, заключается в следующем:

1. Отключить HTTP-прокси CloudFlare (щелкните оранжевое облако на этой записи CNAME, чтобы оноседеет);это также отключает выравнивание CNAME для этой записи.

2. Проверяйте хост на dig, пока не увидите записи CNAME.

3. Проверьте хост CNAME на портале Azure.

4. Повторно включите прокси-сервер HTTP CloudFlare (щелкните на сером облаке на этой записи CNAME, чтобы он стал оранжевым).

Это позволяет вам выполнять проверку в Azure и при этом использовать преимущества CDN CloudFlare.

Более подробную информацию можно найти в этой статье .

...