Как работать с внешним входом в Azure AD с идентификацией ASP.NET в Identity Server4

Я следую статье ниже, чтобы работать с идентификатором asp.net в IdenityServer4: http://docs.identityserver.io/en/release/quickstarts/6_aspnet_identity.html

Теперь я хочу добавить Azure AD в качестве внешнего Idp:

 services.AddIdentityServer()
            .AddDeveloperSigningCredential()
            .AddInMemoryPersistedGrants()
            .AddInMemoryIdentityResources(Config.GetIdentityResources())
            .AddInMemoryApiResources(Config.GetApiResources())
            .AddInMemoryClients(Config.GetClients())
            .AddAspNetIdentity<ApplicationUser>();


        services.AddAuthentication()
           .AddOpenIdConnect("AAD", "Azure Active Directory", options =>
           {
               options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
               options.SignOutScheme = IdentityServerConstants.SignoutScheme;
               options.Authority = "https://login.microsoftonline.com/xxxxxx.onmicrosoft.com";
               options.ClientId = "xxxxxxx";
               options.Scope.Add("openid");
               options.Scope.Add("profile");
               options.TokenValidationParameters = new TokenValidationParameters
               {
                   ValidateIssuer = false
               };
               options.GetClaimsFromUserInfoEndpoint = true;
           });

Но когда я отлаживаю свое приложение ==> перенаправляю на сервер идентификации ==> нажимаю логин AAD. Я замечаю, что когда я перехожу на страницу имени пользователя и пароля Azure AD, мое клиентское приложение останавливается, поэтому после ввода учетных данных и согласия я останусь на странице сервера идентификации. Может ли кто-нибудь дать несколько предложений?

возможно, этот пример может вам помочь: github.com/mclark1129/IdentityServer4.Samples/tree/master/…

Martin Brandl 10.08.2018 09:00

@MartinBrandl, спасибо, я попробовал решение, но коды показывают ошибку, функция устарела

GreenCate 10.08.2018 09:03

Возможно, вам нужно установить свойство options.RepsonseType в вашем примере

Martin Brandl 10.08.2018 09:07

Как насчет конфигурации в Azure AD? Как там настроен Identity Server? Какой поток OAuth2 вы используете?

Chaim Zonnenberg 10.08.2018 09:56

@ChaimZonnenberg, конфигурация Azure AD верна. Сервер идентификации настроен, как показано выше. Пользуюсь гибридным потоком.

GreenCate 10.08.2018 10:10

@MartinBrandl, установите "options.Scope.Add (" openid ");" но та же проблема

GreenCate 10.08.2018 10:15

Затем установите точку останова в «ExternalLoginCallback» в AccountController. Проверьте, правильно ли сопоставлены / предоставлены все утверждения для вашего клиентского приложения.

Chaim Zonnenberg 10.08.2018 10:32

@ChaimZonnenberg, на странице входа в Azure AD клиентское приложение уже остановлено, никогда не запускайте функцию ExternalLoginCallback.

GreenCate 10.08.2018 10:34

Если ваше клиентское приложение завершает работу при переходе к AAD, это может быть связано с отладчиком / средой. Предоставляет ли / может клиентское приложение ведение журнала, почему оно останавливается? Что, если вы запустите клиентское приложение в IIS?

Chaim Zonnenberg 10.08.2018 10:47

@ChaimZonnenberg, но если я удалил часть входа в AAD, клиентское приложение работает нормально, я думаю, что должна быть дополнительная конфигурация / коды, если требуется AAD.

GreenCate 10.08.2018 11:26
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
10
811
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я вижу, вы закомментировали свой URL-адрес Microsoft Authority, как будто он относится к вашей компании. У меня есть внешний вход в Azure AD, настроенный для аутентификации моей компании, и мне просто нужно вызвать https://login.microsoftonline.com/common.

Кроме того, если он правильно перенаправляет на сайт Microsoft и не возвращается обратно на ваш сервер Auth, у вас, вероятно, что-то неправильно настроено в функции ExternalLogin в вашем контроллере.

Это должно выглядеть примерно так:

var props = new AuthenticationProperties()
{
    RedirectUri = Url.Action("ExternalLoginCallback"),
    Items =
    {
        { "returnUrl", returnUrl },
        { "scheme", provider },
    }
};
return Challenge(props, provider);

Где провайдер будет вашим AAD.

Ответ принят как подходящий

Интересно то, что когда я использую хром для запуска своего клиентского приложения в Visual Studio, клиентское приложение больше не останавливается. Довольно странно и не найти объяснения.

Другие вопросы по теме