ASPについてNET MVCにおけるForm AuthenticationとWindows Authenticationの簡単な理解
2262 ワード
一般的なインターネットアプリケーション、例えば人人網、微博は、ユーザーのログインが必要であり、ユーザーがログインしなければ、このサイトを使用することはできません.したがって、ここではFormAuthenticationを使用して、ユーザー名とパスワードを記入するように要求し、ログインに成功した後、FormAuthentication.SetAuthCookie()方式は、認証TokenをクライアントCookieに書き込む.
一般的な企業内部の応用、企業内部情報システム、Windows Auhenticationを使用する.企業内には独自のドメインがあるため、従業員のパソコンにはこのドメイン内のIDが1つあり、このIDは唯一であり、すべての操作はこのIDによって行われます.企業内の情報システムはユーザー登録不要で、このIDを使っているので、Windows Authenticationを使います.しかし注意しなければならないのはSetAuthCookie()には簡単なフィールドが書き込まれることが多いが,一般的にはusernameであるが,真のシステムにおけるUserエンティティは複雑なオブジェクトであり,多くの情報があるため,ユーザがこのシステムに入るたびに,プログラムはユーザのIDまたはusernameに基づいてデータベースに対応する詳細なUserオブジェクトを見つけ,Sessionに格納する.一般的にこれらの操作はGlobalである.asax.csのSession_スタート()で行います.
一般的な企業内部の応用、企業内部情報システム、Windows Auhenticationを使用する.企業内には独自のドメインがあるため、従業員のパソコンにはこのドメイン内のIDが1つあり、このIDは唯一であり、すべての操作はこのIDによって行われます.企業内の情報システムはユーザー登録不要で、このIDを使っているので、Windows Authenticationを使います.しかし注意しなければならないのはSetAuthCookie()には簡単なフィールドが書き込まれることが多いが,一般的にはusernameであるが,真のシステムにおけるUserエンティティは複雑なオブジェクトであり,多くの情報があるため,ユーザがこのシステムに入るたびに,プログラムはユーザのIDまたはusernameに基づいてデータベースに対応する詳細なUserオブジェクトを見つけ,Sessionに格納する.一般的にこれらの操作はGlobalである.asax.csのSession_スタート()で行います.
protected void Session_Start(object sender, EventArgs e)
{
var securityHelper = new SecurityHelper();
securityHelper.Authenticate();
}
public class SecurityHelper
{
private string GetWindowsVcnUserName()
{
// Get windows user
var loggedUser = System.Web.HttpContext.Current.User.Identity;
if (loggedUser != null)
{
string username = loggedUser.Name;
username = username.Substring(username.IndexOf('\\') + 1);
username = username.ToUpper();
return username;
}
return null;
}
public virtual bool Authenticate()
{
// Inject implementation of the UserService through DI
if (UserService == null)
{
UserService = Container.Resolve<UserService>();
}
string userLoggin = GetWindowsVcnUserName();
// Get user from external authorization system
var user = UserService.GetUser(userLoggin);
if (user == null)
{
// , , , Guset ,
}
// Set session
System.Web.HttpContext.Session.Add("user", user);
return true;
}
}
その後,このセッションの生存期間内に,User情報が必要な場合には,セッション中に詳細なUserオブジェクトが存在するため,セッション中から取り出せばよい.