Много дней назад я задал этот вопрос , и у меня установлен работающий автономный поставщик OpenID (наверное).
Мне нужно простое текстовое поле для входа в систему с идентификатором OpenID, которое автоматически примет пользователя и будет считать пользователя вошедшим в систему, а затем я хочу, чтобы он был перенаправлен на главную страницу продуктов (Products => Index).
Но то, что я не знал (и не нашел в интернете), - это как продолжать процесс поддельной аутентификации.
Я пытался сделать это:
[HttpPost]
public ActionResult Login(string openid)//openid is the identifier taken from the login textbox
{
var rely = new OpenIdRelyingParty();
var req = rely.CreateRequest(openid);
req.RedirectToProvider();
return RedirectToAction("Index", "Products");
}
Во-первых, он не перенаправляется в 4-й строке (вместо этого обновляется страница входа в систему), а во-вторых, аутентифицированного пользователя там нет, я имею в виду, когда я проверял User
в окне просмотра, он не равен нулю. но имя пользователя пустое, и нет идентифицированной личности, что, как мне кажется, означает, что файлы cookie не установлены.
P.S:
1. Никаких исключений не выбрасывается. Но когда я пытаюсь вызвать метод FormsAuthentication.RedirectFromLogin (), я получаю исключение (Сервер не может изменять файлы cookie после установки заголовков HTTP).
2. Метод действия индекса помечается атрибутом [Authorize], поэтому, когда кто-то пытается просмотреть Products
, он перенаправляется на экран входа в систему, но при входе в систему (поддельный вход в систему) он не должен быть перенаправлен обратно на Продукты. страница
Я тоже это пробовал:
[HttpPost]
public ActionResult Login(string openid)
{
var rely = new OpenIdRelyingParty();
return rely.CreateRequest(openid).RedirectingResponse.AsActionResult();
}
Но не повезло.
Что я пропустил? и как заставить его работать как положено? Я могу зависеть от себя, но мне нужна приличная документация для OpenID, особенно для автономного локального провайдера.