На веб-сайте Azure запущено приложение ASP.NET Core.Сайт был настроен для аутентификации с использованием Azure AD в соответствии с этим этим примером
Мы тестировали сайт с группой пользователей, и первоначально они могли получить доступ к сайту.Примерно через 24 часа, когда они пытаются получить доступ к сайту, происходит цикл между / signin-oidc на моем сайте и конечной точкой авторизации https://login.microsoftonline.com, а затем происходит сбой с неисправным шлюзом 502.3.
Не уверен, что это связано, но я также вижу это в журналах
Авторизация не удалась для пользователя: (null).
Это происходит надва веб-сайта Azure (подготовка и создание), но я не могу скопировать его на своем ноутбуке, работающем локально.
Это код, который я использую в StartUp.cs
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddOpenIdConnect(options =>
{
options.ClientId = azureAdOptions.ClientId;
var scopes = new List<string>
{
"openid,",
"email",
"profile,",
"offline_access",
"user_impersonation",
"User.Read",
"Mail.Read",
"Mail.Send",
"Directory.Read",
"User.ReadBasic.All",
"Calendars.ReadWrite",
"Sites.ReadWrite.All"
};
foreach (var scope in scopes)
{
options.Scope.Add(scope);
}
options.Resource = graphOptions.ResourceId;
options.Authority = $"{azureAdOptions.AadInstance}{azureAdOptions.Tenant}";
options.SignedOutRedirectUri = azureAdOptions.PostLogoutRedirectUri;
options.CallbackPath = "/signin-oidc";
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.Events = new OpenIdConnectEvents
{
OnRemoteFailure = OnAuthenticationFailed,
OnAuthorizationCodeReceived = async (context) =>
{
var code = context.ProtocolMessage.Code;
var identifier = context.Principal.GetObjectIdentifierValue();
var provider = services.BuildServiceProvider();
var authProvider = provider.GetService<IInSiteAuthProvider>();
var result = await authProvider.GetTokenByAuthorizationCodeAsync(identifier, code);
if (result == null)
{
context.Fail("couldn't get auth code");
}
else
{
context.HandleCodeRedemption(result.AccessToken, result.IdToken);
}
}
};
}).AddCookie();