Внешний логин не работает сервер идентификации 4 asp.net ядро

#c# #asp.net #asp.net-core #asp.net-identity #identityserver4

#c# #asp.net #asp.net-core #asp.net-identity #identityserver4

Вопрос:

Конфигурация внешней службы, не работающая с сервером идентификации 4.

 public static void ConfigureExternalOidcProvider(this IServiceCollection services)
        {
            services.AddAuthentication().AddGoogle("Google", options =>
            {
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

                options.ClientId = "xxxxxxxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com";
                options.ClientSecret = "xxxxxxxxxxxxxxx";
            }).AddFacebook(options =>
            {
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                options.AppId = "xxxxxxxxxxxxx";
                options.AppSecret = "xxxxxxxxxxxxxxxxxxx";
            });
        }
  

Во внешнем контроллере схема равна нулю, но я жестко запрограммировал схему с помощью IdentityServerConstants.ExternalCookieAuthenticationScheme , даже если она не работает.

 public IActionResult Challenge(string scheme, string returnUrl)
    {
        if (string.IsNullOrEmpty(returnUrl)) returnUrl = "~/";

        // validate returnUrl - either it is a valid OIDC URL or back to a local page
        if (Url.IsLocalUrl(returnUrl) == false amp;amp; _interaction.IsValidReturnUrl(returnUrl) == false)
        {
            // user might have clicked on a malicious link - should be logged
            throw new Exception("invalid return URL");
        }
        
        // start challenge and roundtrip the return URL and scheme 
        var props = new AuthenticationProperties
        {
            RedirectUri = Url.Action(nameof(Callback)), 
            Items =
            {
                { "returnUrl", returnUrl }, 
                { "scheme", scheme },
            }
        };

        return Challenge(props, scheme);
        
    }
  

Когда я нажимаю на кнопку Google и Facebook, она никогда не перенаправляется на страницу Google или Facebook.

Вот результат моего варианта отладки

введите описание изображения здесь

Нажмите Google

введите описание изображения здесь

Facebook нажмите

введите описание изображения здесь

Код CSHTML

    @if (Model.VisibleExternalProviders.Any())
                    {
                        @foreach (var provider in Model.VisibleExternalProviders)
                        {
                            <a class="@($"mdc-button mdc-button--outlined ml-1 mb-1 {(provider.AuthenticationScheme == "Google" ? "mdl-button--googleplus google-logo" : "mdl-button--facebook")}")"
                               asp-controller="External"
                               asp-action="Challenge"
                               asp-route-provider="@provider.AuthenticationScheme"
                               asp-route-returnUrl="@Model.ReturnUrl">
                                @if (provider.AuthenticationScheme == "Google")
                                {
                                    <i class="fab fa-google fa-fw google-logo"></i>
                                }
                                else
                                {
                                    <i class="fab fa-facebook-square fa-fw"></i>
                                }
                                @provider.DisplayName
                            </a>
                        }
                    }
  

Комментарии:

1. Убедитесь, что у вас установлены последние версии приложений. В соответствии со следующей веб-страницей требуется протокол TLS. Лучше всего использовать анализатор, такой как wireshark или fiddler, и получить номер статуса ответа, чтобы помочь определить причину ошибки. Смотрите: developers.google.com/standard-payments/reference /…

2. Где определение для Вызова (реквизит, схема); метод?

3. Внешний контроллер быстрого запуска

4. Это отладочный снимок с помощью щелчка «Google» или щелчка «Facebook»? Если это для щелчка «Facebook», то я думаю, что схема равна нулю, потому что при вызове AddFacebook вы не указываете имя схемы Facebook

5. Это из Google

Ответ №1:

Без дополнительной информации трудно ответить на ваш вопрос, поэтому я собираюсь начать, а затем улучшить свой ответ, когда вы дадите больше деталей. Прежде всего убедитесь, что вы видите scheme параметр запроса при наведении курсора мыши на кнопку внешнего входа:

введите описание изображения здесь

Комментарии:

1. Да, я вижу, я обновил сообщение, пожалуйста, взгляните

2. Ваш параметр маршрута для схемы по ошибке называется provider. Изменить asp-route-provider на asp-route-scheme

3. Привет, Авиад П., как ты нарисовал эту стрелку?

4. В моем случае внешний контроллер был недоступен из-за недопустимого ограничения маршрута на внешнем контроллере.