나는 인증 및 권한 부여에 관해 엄청난 양의 물건을 읽었으며 작동하는 것으로 보이는 코드를 최종적으로 정해 놓았지만 FormsAuthenticationTicket까지는 그 모든 일을 완전히 이해하지 못했습니다.Windows 인증에서 FormsAuthenticationTicket을 사용하는 이유는 무엇입니까?
내가 작업하고있는 MVC 앱은 민감한 데이터를 처리 할 것이므로 인증 및 권한 부여와 관련된 모든 것을 3 회 확인하고 싶습니다.
Windows 인증을 사용하고 있습니다.
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
SQL Server에 추가 사용자 및 사용 권한 정보가있는 테이블 집합이 있습니다.
- 사용자
- 역할
- UsersInRoles 응용 프로그램의 개체 및 관련 권한을 정의
- 다른 테이블. WindowsAuthentication_OnAuthenticate에은 FormsAuthenticationTicket이 왜
내에서 Global.asax에서
나는 다음과 같은 방법이 그래서 여기
http://www.codeproject.com/Articles/5182/Insight-into-Security-Model-using-Principal-and-Id
protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
if (e.Identity == null || !e.Identity.IsAuthenticated)
{
//Redirect to error or access denied page
}
string userData = e.Identity.AuthenticationType;
var cachedUser = HttpContext.Current.Cache[e.Identity.Name] as User;
if (cachedUser == null)
{
var user = repo.GetUserByFullUserName(e.Identity.Name);
HttpContext.Current.Cache.Insert(e.Identity.Name, user, null, DateTime.Now.AddMinutes(2), Cache.NoSlidingExpiration);
cachedUser = HttpContext.Current.Cache[e.Identity.Name] as User;
}
var userIdentity = e.Identity.Name;
var formsAuthTicket = new FormsAuthenticationTicket(1, e.Identity.Name, DateTime.Now, DateTime.Now.AddMinutes(2), false, userData);
var encryptedTicket = FormsAuthentication.Encrypt(formsAuthTicket);
var httpcook = new HttpCookie("authCookie", encryptedTicket);
Response.Cookies.Add(httpcook);
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
var httpcook = Context.Request.Cookies["authCookie"];
var formsAuthTicket = FormsAuthentication.Decrypt(httpcook.Value);
var cachedUser = GetCachedUser(formsAuthTicket.Name);
if (cachedUser == null)
{
cachedUser = CreateCachedUser(formsAuthTicket.Name);
}
var genIdentity = new GenericCustomIdentity(cachedUser, Request.IsAuthenticated, formsAuthTicket.UserData);
var genPrincipal = new GenericCustomPrincipal(genIdentity, cachedUser);
HttpContext.Current.User = genPrincipal;
}
}
에서 영감을 내 질문 있습니다 방법? WinAuth 메서드에서 Identity 및 Principal 객체를 작성할 수 없습니까?
HttpContext.Current.Cache에 사용자 데이터를 보안 위험에 저장하고 있습니까? 이 메서드는 여러 번 호출되기 때문에 매 요청마다 db에 충돌하는 것을 원하지 않습니다. 더 나은 /보다 안전한 대안이 있습니까?
FormsAuthenticationTickets, Identity 및 Principal을 사용하는 데 익숙하지 않아서 의견이나 제안을 매우 높이 평가할 수 있습니다. 미안, 이건 질문이 아니야.
[ASP.Net MVC를 잠그기 위해 web.config를 사용하지 마십시오.] (http://stackoverflow.com/questions/11765030/how-to-lock-down-paths-in-asp-net-mvc-4) –
이것은 Windows 인증에도 적용됩니까? 등록 양식이나 로그인 화면이 없습니다. User.Identity를 얻고 내 데이터베이스에 '기본'레코드를 만든 다음 다른 권한이나 제한을 다른 시간에 적용하도록 관리자에게 맡깁니다. 나는 아직 모든 세부 사항을 가지고 있지는 않지만 유효한 AD 계정을 가진 모든 사용자는 액세스가 허용되어야하며 다른 사용자는 액세스해서는 안됩니다. 이 경우 링크의 제안을 따르거나 web.config를 그대로 두어야합니까? – killerbunnyattack