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_スタート()で行います.
 
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オブジェクトが存在するため,セッション中から取り出せばよい.