Мне нужно аутентифицировать пользователя из центрального CAS. Предположение о том, таковы:.Net MVC 4 CAS Аутентификация
- UserId для аутентификации в заголовке запроса
- Роли для авторизации приведены на веб-службы.
- Приложение должно кэшировать фазу авторизации.
Я попытался это:
В Global.asax:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
const string SiteMinderHeaderToken = "SM_USER";
if (HttpContext.Current.User == null || !HttpContext.Current.User.Identity.IsAuthenticated)
{
var userSSO = HttpContext.Current.Request.Headers[SiteMinderHeaderToken];
GenericIdentity webIdentity = new GenericIdentity(userSSO, "SiteMinder");
string[] roles = { "ROLE1", "ROLE2" };
GenericPrincipal principal = new GenericPrincipal(webIdentity, roles);
HttpContext.Current.User = principal;
// System.Web.Security.FormsAuthentication.SetAuthCookie(userSSO, true);
}
}
В Web.config
<authentication mode="None" />
<authorization>
<deny users="?" />
</authorization>
Проблема в том, что для каждого запроса , HttpContext.Current.User
всегда имеет значение, и каждый t Все операции аутентификации и авторизации завершены.
Если я раскомментировать
System.Web.Security.FormsAuthentication.SetAuthCookie(userSSO, true);
Все нормально, после первого запроса пользователь проходит проверку подлинности.
Мои вопросы:
- ли правильно называть System.Web.Security.FormsAuthentication.SetAuthCookie, даже если там не FormAuthentication?
- Есть ли способ сделать это лучше?
- Существуют ли какие-либо проблемы с безопасностью?
Благодаря
Спасибо, хороший формат и данные, но, кажется, немного не по теме, подальше от моих вопросов. – Guaido79
1. FormsAuthentication - это просто сохранение сеанса. 2. Мой путь выше - лучший способ хранения сеанса с дополнительными данными. 3. FormsAuthentication хранит зашифрованный файл cookie, поэтому он безопасен. –