コード例 #1
0
        /// <summary>Windows集成登录</summary>
        public static WebActionResult WindowsLogin(this HttpContextBase context, WindowsIdentity logonUser)
        {
            var result = new WebActionResult();

            if (!logonUser.IsAuthenticated)
            {
                result.ErrorMessage = "Windows登录失败,不允许匿名登录!";
                return(result);
            }
            var identityService = GetService <IADIdentityService>();

            if (!identityService.ValidateCredentials(logonUser))
            {
                result.ErrorMessage = "Windows登录失败,账户不存在!";
                return(result);
            }
            var service         = GetService <ISecurityService>();
            var windowsUser     = logonUser.Name.Split('\\');
            var windowsUserName = windowsUser[1];
            var loginResult     = context.Login(service, AuthenticationType.Windows, windowsUserName, windowsUserName);

            if (!loginResult.Succeed)
            {
                if (identityService.AutoRegisterUser)
                {
                    var registerResult = context.AutoRegisterDomainUser(windowsUserName);
                    if (!registerResult.Succeed)
                    {
                        result.ErrorMessage = registerResult.ErrorMessage;
                        return(result);
                    }
                }
                loginResult = context.Login(service, AuthenticationType.Windows, windowsUserName, windowsUserName);
                if (!loginResult.Succeed)
                {
                    result.ErrorMessage = loginResult.ErrorMessage;
                    return(result);
                }
            }
            result.Succeed = true;
            var returnUrl = context.Request["returnUrl"];

            if (!returnUrl.IsNullOrEmpty())
            {
                returnUrl = returnUrl.UrlDecode();
            }
            result.Data = context.GetPortalLoginReturnUrl(service, loginResult.Token, loginResult.Principal, returnUrl);
            context.AddAuthCookie(loginResult.Token, loginResult.Principal, false);
            return(result);
        }