Мы используем аутентификацию WsFederation с сервером ADFS. Большинство написанных нами приложений работают с приведенным ниже кодом (за исключением, конечно, кода отладки), но мое приложение просто не хочет работать.
Я получаю редирект на страницу входа на сервере AD, и могу без проблем ввести UserId и Password, но по возвращении должен быть сохранен файл cookie, но это не так. Результатом является то, что в следующем раунде перенаправление происходит снова (на этот раз без формы входа в систему).
Код отладки попадает только на RedirectToIdentityProvider
. Никто другой не называется.
Код находится в Startup.cs для OWIN.
private static void ConfigureAuth(IAppBuilder app, ISettings settings)
{
app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);
// Work-around to fix Katana issue 197: https://katanaproject.codeplex.com/workitem/197
// https://github.com/KentorIT/owin-cookie-saver
app.UseKentorOwinCookieSaver();
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
});
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
{
Wtrealm = settings.WsFedRealm,
MetadataAddress = settings.WsFedMetadataUrl,
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = ClaimsExtensions.WurNameIdentifier,
SaveSigninToken = true,
// ValidIssuer = settings.ValidIssuer
},
Notifications = new WsFederationAuthenticationNotifications
{
MessageReceived = context =>
{
Log.Info($"Message received {context.ProtocolMessage}");
return Task.FromResult(0);
},
RedirectToIdentityProvider = context =>
{
Log.Info($"Redirect to identity provider {context?.Request?.Uri?.AbsolutePath}");
return Task.FromResult(0);
},
SecurityTokenValidated = context =>
{
Log.Info("Security token validated");
return Task.FromResult(0);
},
SecurityTokenReceived = context =>
{
Log.Info($"SecurityTokenReceived {context?.Response?.ReasonPhrase}");
return Task.FromResult(0);
},
AuthenticationFailed = context =>
{
Log.Error($"Authentication failed Uri:{context.Request?.Uri} User:{context.Request?.User?.Identity?.Name}");
context.HandleResponse();
context.Response.Redirect("~/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
}
}
});
app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
}