Вы можете использовать WIF в MVC без STS.
Я использовал шаблон MVC2 по умолчанию, но он должен работать и с MVC 3.
Тебе надо:
1 – Подключите модуль WIF SessionAuthenticationModule (web.config).
< add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
2. Где бы вы ни аутентифицировали своих пользователей, создайте ClaimsPrincipal, добавьте все необходимые утверждения, а затем создайте SessionSecurityToken. Это действие LogOn в AccountController, созданное MVC:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
var cp = new ClaimsPrincipal();
cp.Identities.Add(new ClaimsIdentity());
IClaimsIdentity ci = (cp.Identity as IClaimsIdentity);
ci.Claims.Add(new Claim(ClaimTypes.Name, model.UserName));
SessionSecurityToken sst = FederatedAuthentication
.SessionAuthenticationModule
.CreateSessionSecurityToken(cp,
"MVC Test",
DateTime.
UtcNow,
DateTime.
UtcNow.
AddHours
(1),
true);
FederatedAuthentication.SessionAuthenticationModule.CookieHandler.RequireSsl = false;
FederatedAuthentication.SessionAuthenticationModule.AuthenticateSessionSecurityToken(sst, true);
//FormsService.SignIn(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Я просто добавил нужные строки, а все остальное оставил прежним. Поэтому может потребоваться некоторый рефакторинг.
С этого момента ваше приложение получит ClaimsPrincipal. Все автоматически обрабатывается WIF.
CookieHandler.RequiresSsl = false только потому, что это машина разработчика, и я не выполняю развертывание в IIS. Это также может быть определено в конфигурации.
person
Eugenio Pace
schedule
20.05.2011