Рассказ.У меня есть следующий код (в F #, но не волнуйтесь) в ASP.NET Core 2.2
.AddAuthentication(fun options ->
options.DefaultScheme <- CookieAuthenticationDefaults.AuthenticationScheme
options.DefaultChallengeScheme <- OpenIdConnectDefaults.AuthenticationScheme)
.AddCookie(fun options ->
options.Events.OnRedirectToLogin <- (fun ctx -> ctx.Response.StatusCode <- 401; Task.CompletedTask))
.AddOpenIdConnect(fun options ->
options.ClientId <- clientId
options.Authority <- sprintf "https://login.microsoftonline.com/%s" tenantId
options.ResponseType <- OpenIdConnectResponseType.IdToken
options.Events <-
OpenIdConnectEvents(
OnTokenValidated =
(fun ctx ->
logger.Information("Token validated for {user}", ctx.Principal.Identity.Name)
Task.CompletedTask),
OnRemoteFailure =
(fun ctx -> logger.Error(ctx.Failure, "OnRemoteFailure"); Task.CompletedTask),
OnAuthenticationFailed =
(fun ctx -> logger.Error(ctx.Exception, "OnAuthenticationFailed"); Task.CompletedTask))
options.GetClaimsFromUserInfoEndpoint <- true
options.TokenValidationParameters <-
TokenValidationParameters(
NameClaimType = "name",
AuthenticationType = "Cookies",
ValidateIssuer = false))
Я хотел бы авторизовать пользователя, не перенаправляя на login.microsoftonline.com
, а просто передав токен JWT, илилюбое другое «волшебное звено».
Почему? У меня есть тест на селен E2E, который постоянно имеет проблемы с login.microsoftonline.com
.Я вкладываю много времени, чтобы это исправить, но я устал.Поэтому я решил вызвать Azure AD вручную, сгенерировать токен, проверить его в приложении и выпустить Cookie.