Я пытаюсь добавить внешний вход Azure AD (регистрация пользователя, согласие и вход) на сервер OpenIddict.
ASP.NET CORE MVC (Клиент) -> Сервер аутентификации (OpenIdDict) -> Логин Microsoft (Слишком длинная строка запроса)
Это из-за государства? Состояние, создаваемое OpenId connect для внешнего входа в Azure AD, слишком долго
Если да, есть ли способ сгенерировать короткое состояние с помощью OpenIddict?
На сервере аутентификации я добавил внешний вход
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = ClientId;
microsoftOptions.ClientSecret = ClientSecret;
}
Вот полезная нагрузка client_id: Guid response_type: code redirect_uri: localhost:port/signin-microsoft scope: graph.microsoft.com/user.read code_challenge: nfVqXWBJ7826KcPigIPy6AzQdzXJHaJktj-OuNkg6A code_challenge_method: S 256 состояние: CfDJ8BVMooZUnqJBtvjaXHnb-8BSQfuyu9HwKaBTsDpCKV Состояние самый длинный, я не смог скопировать все состояние, потому что оно 4400 символов
Что-то похожее на метод расширения AddOidcStateDataFormatterCache в IdentityServer. docs.duendesoftware.com/identityserver/v5/ui/login/external/…
Если вы видите этот пост в блоге, то он говорит:
Вместо метода AddMicrosoftAccount теперь следует использовать метод расширения OIDC AddOpenIdConnect.
Поэтому я бы порекомендовал вам вместо этого попробовать использовать AddOpenIdConnect.
Я пробую AddOpenIdConnect вместо AddMicrosoftAccount
У меня такая же ошибка - Запрошенная строка запроса слишком длинная. Считаете ли вы, что состояние сохраняет предыдущий вызов ExternalLogin?returnUrl=включает параметры подключения openid из ASP.NET CORE MVC (клиент)
Можете ли вы опубликовать немного больше о том, как вы настраиваете OpenIDConnect? Обычно это не должно быть так долго.
Похоже на: github.com/openiddict/openiddict-samples/blob/dev/samples/…
Пожалуйста, опубликуйте полный URL-адрес запроса, который не работает
Еще один пример, который объясняет, что я пытаюсь сделать — damienbod.com/2022/05/02/… Вместо angular и keycloak — я использую asp.net core mvc и AzureAd.
Без аутентификации — клиентское приложение ASP.NET CORE MVC будет перенаправлять пользователей на сервер аутентификации вместе с полезной нагрузкой, связанной с клиентом — (returnurl, идентификатор клиента, redirect_url, области, code_challenge, состояние и т. д.).
На сервере аутентификации, когда вы нажимаете на внешний вход, он отправляет returnUrl клиента в ExternalLogin.cshtml.cs (вы увидите эту страницу после создания шаблонов — промежуточного программного обеспечения DefaultUI для Identity).
ПО промежуточного слоя MicrosoftAccount/OpenIdConnect учитывало returnUrl клиента и полезную нагрузку с сервера аутентификации для создания состояния, которое приводило к длинной строке запроса запроса.
Я решил эту проблему, изменив значение returnUrl в ExternalLogin.cshtml.cs на пустое.
returnUrl = string.Empty;
// Request a redirect to the external login provider.
var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return new ChallengeResult(provider, properties);
Вы будете перенаправлены в Azure AD без каких-либо ошибок.
После успешного входа в Azure основная информация, такая как профиль и электронная почта, будет отправлена на сервер аутентификации для регистрации пользователя.
Когда вы нажимаете «Зарегистрировать», в фоновом режиме ваша информация будет храниться в базе данных, перенаправляться клиенту и обратно на сервер аутентификации для получения согласия. После того, как вы предоставите разрешения или согласие, он перенаправит вас в клиентское приложение как пользователя, прошедшего проверку подлинности.
Можете ли вы опубликовать образец ссылки, которая слишком длинная? также какое из полей самое длинное?