Я следую статье ниже, чтобы работать с идентификатором 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, мое клиентское приложение останавливается, поэтому после ввода учетных данных и согласия я останусь на странице сервера идентификации. Может ли кто-нибудь дать несколько предложений?
@MartinBrandl, спасибо, я попробовал решение, но коды показывают ошибку, функция устарела
Возможно, вам нужно установить свойство options.RepsonseType в вашем примере
Как насчет конфигурации в Azure AD? Как там настроен Identity Server? Какой поток OAuth2 вы используете?
@ChaimZonnenberg, конфигурация Azure AD верна. Сервер идентификации настроен, как показано выше. Пользуюсь гибридным потоком.
@MartinBrandl, установите "options.Scope.Add (" openid ");" но та же проблема
Затем установите точку останова в «ExternalLoginCallback» в AccountController. Проверьте, правильно ли сопоставлены / предоставлены все утверждения для вашего клиентского приложения.
@ChaimZonnenberg, на странице входа в Azure AD клиентское приложение уже остановлено, никогда не запускайте функцию ExternalLoginCallback.
Если ваше клиентское приложение завершает работу при переходе к AAD, это может быть связано с отладчиком / средой. Предоставляет ли / может клиентское приложение ведение журнала, почему оно останавливается? Что, если вы запустите клиентское приложение в IIS?
@ChaimZonnenberg, но если я удалил часть входа в AAD, клиентское приложение работает нормально, я думаю, что должна быть дополнительная конфигурация / коды, если требуется AAD.
Я вижу, вы закомментировали свой 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, клиентское приложение больше не останавливается. Довольно странно и не найти объяснения.
возможно, этот пример может вам помочь: github.com/mclark1129/IdentityServer4.Samples/tree/master/…