Я использую идентификатор ASP.NET с сервером ADFS. В целях развития я хочу избежать использования сервера ADFS, когда я нахожусь в сетевой среде, где я не могу связаться с сервером ADFS. Вот почему я добавил простое действие контроллера в моем HomeController, который устанавливает вручную, вошедшего в систему пользователя:Как вы вручную установили зарегистрированный пользователь Identity?
#if DEBUG
[AllowAnonymous]
public ActionResult LogIn()
{
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.NameIdentifier, "tester"));
System.Web.HttpContext.Current.User = new ClaimsPrincipal(new ClaimsIdentity(claims));
System.Threading.Thread.CurrentPrincipal = System.Web.HttpContext.Current.User;
return Redirect("Home/Index");
}
#endif
и метод конфигурации Owin:
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions() { });
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata
});
}
закомментировать ту часть, где я использую WsFederation Аутентификация нет проблем, таким образом, нет ссылки на мой текущий сервер ADFS.
Проблема: Когда я перенаправлен на действие Home/Index (у которого есть атрибут Authorize), идентификатор ASP.NET не распознает мой ClaimsPrincipal как действительный логин, поэтому я перенаправлен на главную/Действие входа, которое постоянно создает петлю между Домой/Логин и Главная/Индекс.
Мой вопрос: как заставить ASP.NET принять ClaimsPrincipal, созданную выше как действительный логин?
Спасибо за помощь! По какой-то причине он по-прежнему не устанавливает cookie. Это может быть случай случайного использования одних и тех же классов в разных пакетах nuget. Или, может быть, мой файл конфигурации Owin неверен. Я обновил свой вопрос, как выглядит моя конфигурация Owin на всякий случай. Теперь я ухожу из работы, поэтому я не могу повторить попытку до завтра. – ohyeah
@ohyeah см. Мое обновление. – trailmax
Отлично работает, спасибо! Я заметил, что этот ответ в значительной степени не зависит от ADFS, поэтому я отредактировал ваш код для моего окончательного решения. Надеюсь, это достаточно просто для всех, кому это нужно, просто скопировать и вставить в свои проекты. – ohyeah