Exemplo n.º 1
0
        protected override void OnInit(EventArgs eventArgs)
        {
            try
            {
                this.SetThreadCultureFromRequestedWeb();

                //ZimbraMembershipProvider z_membershipProvider = (ZimbraMembershipProvider)Membership.Providers["ZimbraMembershipProvider"];
                //ZimbraRoleProvider z_roleProvider = (ZimbraRoleProvider)Roles.Providers["ZimbraRoleProvider"];
            }
            catch (Exception ex)
            {
                ProviderLogging.LogError(ex);
            }
        }
Exemplo n.º 2
0
        protected void AuthenticateEventHandler(object sender, AuthenticateEventArgs formAuthenticateEventArgs)
        {
            if (sender == null)
            {
                throw new ArgumentNullException("sender");
            }
            if (formAuthenticateEventArgs == null)
            {
                throw new ArgumentNullException("formAuthenticateEventArgs");
            }
            bool          flag          = false;
            Login         login         = sender as Login;
            SecurityToken securityToken = null;

            if (login == null)
            {
                throw new ArgumentException(null, "sender");
            }

            using (SPMonitoredScope sPMonitoredScope = new SPMonitoredScope("ZimbraSignInPage.AuthenticateEventHandler: Retrieve security token and establish session."))
            {
                securityToken = this.GetSecurityToken(login);
                if (securityToken != null)
                {
                    try
                    {
                        this.EstablishSessionWithToken(securityToken, this.GetSessionTokenWriteType(login));
                        this.ExecuteRegisteredAsyncTasks();

                        flag = true;
                    }
                    catch
                    {
                        flag = false;
                    }

                    try
                    {
                        SPFederationAuthenticationModule federationAuthenticationModule = FederatedAuthentication.WSFederationAuthenticationModule as SPFederationAuthenticationModule;
                        federationAuthenticationModule.SetPrincipalAndWriteSessionToken(securityToken, this.GetSessionTokenWriteType(login));
                    }
                    catch (Exception ex)
                    {
                        ProviderLogging.LogError(ex);
                    }
                }
                else
                {
                    flag = false;
                }
            }
            formAuthenticateEventArgs.Authenticated = flag;

            if (flag)
            {
                EnsureVisitor(securityToken as GenericXmlSecurityToken);

                /*
                 * try
                 * {
                 * Guid id = SPContext.Current.Site.ID;
                 * SPSecurity.RunWithElevatedPrivileges(delegate()
                 * {
                 *  using (SPWeb elevatedWeb = new SPSite(id).OpenWeb())
                 *  {
                 *      elevatedWeb.AllowUnsafeUpdates = true;
                 *
                 *      GenericXmlSecurityToken xmlToken = securityToken as GenericXmlSecurityToken;
                 *      XmlDocument xmlDoc = new XmlDocument();
                 *      xmlDoc.LoadXml(xmlToken.TokenXml.OuterXml);
                 *      XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
                 *      nsmgr.AddNamespace("saml", "urn:oasis:names:tc:SAML:1.0:assertion");
                 *      //string userid = xmlDoc.SelectSingleNode("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userid']/saml:AttributeValue", nsmgr).InnerText;
                 *      //string userlogonname = xmlDoc.SelectSingleNode("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userlogonname']/saml:AttributeValue", nsmgr).InnerText;
                 *      //string emailaddress = xmlDoc.SelectSingleNode("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='emailaddress']/saml:AttributeValue", nsmgr).InnerText;
                 *      string name = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='name']/saml:AttributeValue", nsmgr)[1].InnerText;
                 *      string userlogonname = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userlogonname']/saml:AttributeValue", nsmgr)[1].InnerText;
                 *      string userid = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userid']/saml:AttributeValue", nsmgr)[1].InnerText;
                 *      SPUser spUser = elevatedWeb.EnsureUser(name);
                 *      elevatedWeb.Update();
                 *      elevatedWeb.AllowUnsafeUpdates = false;
                 *  }
                 * });
                 *
                 * }
                 * catch (Exception ex)
                 * {
                 *  ProviderLogging.LogError(ex);
                 * }
                 */

                this.RedirectToSuccessUrl();
            }
        }
Exemplo n.º 3
0
        protected virtual SecurityToken GetSecurityToken(Login formsSignInControl)
        {
            if (formsSignInControl == null)
            {
                throw new ArgumentNullException("formsSignInControl");
            }
            SecurityToken securityToken = null;
            //AAM settings must correnspond with the domain(s).
            SPIisSettings iisSettings = this.IisSettings;

            if (!iisSettings.UseClaimsAuthentication || !iisSettings.UseFormsClaimsAuthenticationProvider)
            {
                /*
                 * ULSCat msoulscatWSSClaimsAuthentication = ULSCat.msoulscat_WSS_ClaimsAuthentication;
                 * string str = string.Concat(this.LogPrefix, "Loaded the FormsSignInPage from request '{0}' but we are not in a context where claims forms sign is is enabled.");
                 * object[] contextUri = new object[] { SPAlternateUrl.ContextUri };
                 * ULS.SendTraceTag(1430947, msoulscatWSSClaimsAuthentication, ULSTraceLevel.Unexpected, str, contextUri);
                 */
                throw new InvalidOperationException();
            }

            //Initialize Providers
            try
            {
                ZimbraMembershipProvider z_membershipProvider = (ZimbraMembershipProvider)Membership.Providers["ZimbraMembershipProvider"];
                ZimbraRoleProvider       z_roleProvider       = (ZimbraRoleProvider)Roles.Providers["ZimbraRoleProvider"];
            }
            catch (Exception ex)
            {
                ProviderLogging.LogError(ex);
            }

            if (this.IsLoginControlInValidState(formsSignInControl))
            {
                //string str1 = null;
                Uri appliesTo = this.AppliesTo;
                SPFormsAuthenticationProvider formsClaimsAuthenticationProvider = iisSettings.FormsClaimsAuthenticationProvider;
                CultureInfo invariantCulture = CultureInfo.InvariantCulture;
                object[]    userName         = new object[] { (formsSignInControl.RememberMeSet ? string.Empty : "non-"), formsSignInControl.UserName, formsClaimsAuthenticationProvider.MembershipProvider, formsClaimsAuthenticationProvider.RoleProvider, appliesTo, SPAlternateUrl.ContextUri };
                //str1 = string.Format(invariantCulture, "{0}persistant security token for user '{1}' with membership provider '{2}' and role provider '{3}' with applies to '{4}' for request '{5}'.", userName);
                //ULS.SendTraceTag(1430977, ULSCat.msoulscat_WSS_ClaimsAuthentication, ULSTraceLevel.Verbose, string.Concat(this.LogPrefix, "Requesting a ", str1));
                SPFormsAuthenticationOption sPFormsAuthenticationOption = SPFormsAuthenticationOption.None;
                if (formsSignInControl.RememberMeSet)
                {
                    sPFormsAuthenticationOption = SPFormsAuthenticationOption.PersistentSignInRequest;
                }
                try
                {
                    securityToken = SPSecurityContext.SecurityTokenForFormsAuthentication(appliesTo, formsClaimsAuthenticationProvider.MembershipProvider, formsClaimsAuthenticationProvider.RoleProvider, formsSignInControl.UserName, formsSignInControl.Password, sPFormsAuthenticationOption);
                    //ULS.SendTraceTag(1430978, ULSCat.msoulscat_WSS_ClaimsAuthentication, ULSTraceLevel.Verbose, string.Concat(this.LogPrefix, "Successfully got a ", str1));
                }
                catch //(Exception exception1)
                {
                    /*
                     * Exception exception = exception1;
                     * ULSCat uLSCat = ULSCat.msoulscat_WSS_ClaimsAuthentication;
                     * string str2 = string.Concat(this.LogPrefix, "Failed to get a ", str1, " Exception: '{0}'");
                     * object[] objArray = new object[] { exception };
                     * ULS.SendTraceTag(1430979, uLSCat, ULSTraceLevel.Verbose, str2, objArray);
                     */
                    securityToken = null;
                    //SPSecurityContext.SecurityTokenForContext
                }
            }
            else
            {
                /*
                 * ULSCat msoulscatWSSClaimsAuthentication1 = ULSCat.msoulscat_WSS_ClaimsAuthentication;
                 * string str3 = string.Concat(this.LogPrefix, "Cancelling sign-in for request '{0}'.");
                 * object[] contextUri1 = new object[] { SPAlternateUrl.ContextUri };
                 * ULS.SendTraceTag(1430976, msoulscatWSSClaimsAuthentication1, ULSTraceLevel.VerboseEx, str3, contextUri1);
                 */
                securityToken = null;
            }
            return(securityToken);
        }
Exemplo n.º 4
0
        //internal async Task EnsureVisitor(GenericXmlSecurityToken xmlToken)
        internal void EnsureVisitor(GenericXmlSecurityToken xmlToken)
        {
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(xmlToken.TokenXml.OuterXml);
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);

            nsmgr.AddNamespace("saml", "urn:oasis:names:tc:SAML:1.0:assertion");

            XmlNodeList names          = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='name']/saml:AttributeValue", nsmgr);
            XmlNodeList userlogonnames = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userlogonname']/saml:AttributeValue", nsmgr);
            XmlNodeList userids        = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userid']/saml:AttributeValue", nsmgr);
            //string namefirst = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='name']/saml:AttributeValue", nsmgr)[1].InnerText;
            //string userlogonname = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userlogonname']/saml:AttributeValue", nsmgr)[1].InnerText;
            //string userid = xmlDoc.SelectNodes("//saml:Assertion/saml:AttributeStatement/saml:Attribute[@AttributeName='userid']/saml:AttributeValue", nsmgr)[1].InnerText;

            Guid id = SPContext.Current.Site.ID;

            //await Task.Run(() => SPSecurity.RunWithElevatedPrivileges(delegate()
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPWeb elevatedWeb = new SPSite(id).OpenWeb())
                {
                    elevatedWeb.AllowUnsafeUpdates = true;
                    List <SPUser> spUsers          = new List <SPUser>();

                    foreach (XmlNode node in names)
                    {
                        try
                        {
                            SPUser spUserbyname = elevatedWeb.EnsureUser(node.InnerText);

                            if (!spUsers.Any <SPUser>(u => u.ID == spUserbyname.ID))
                            {
                                spUsers.Add(spUserbyname);
                            }
                            //break;
                        }
                        catch (Exception ex)
                        {
                            ProviderLogging.LogError(ex);
                        }
                    }
                    foreach (XmlNode node in userlogonnames)
                    {
                        try
                        {
                            SPUser spUserbyname = elevatedWeb.EnsureUser(node.InnerText);
                            if (!spUsers.Any <SPUser>(u => u.ID == spUserbyname.ID))
                            {
                                spUsers.Add(spUserbyname);
                            }
                            //break;
                        }
                        catch (Exception ex)
                        {
                            ProviderLogging.LogError(ex);
                        }
                    }


                    foreach (XmlNode node in userids)
                    {
                        try
                        {
                            SPUser spUserbyname = elevatedWeb.EnsureUser(node.InnerText);
                            if (!spUsers.Any <SPUser>(u => u.ID == spUserbyname.ID))
                            {
                                spUsers.Add(spUserbyname);
                            }
                            //break;
                        }
                        catch (Exception ex)
                        {
                            ProviderLogging.LogError(ex);
                        }
                    }

                    elevatedWeb.Update();

                    try
                    {
                        if (spUsers != null && spUsers.Count > 0)
                        {
                            SPGroup usersGroup   = elevatedWeb.SiteGroups.GetByID(7);
                            SPGroup visitorGroup = elevatedWeb.AssociatedVisitorGroup;

                            foreach (SPUser user in spUsers)
                            {
                                usersGroup.AddUser(user);
                                visitorGroup.AddUser(user);
                            }

                            /*
                             * if(usersGroup != null)
                             * {
                             *
                             *  usersGroup.AddUser(spUser);
                             * }
                             *
                             * //.SiteGroups.Web.AssociatedVisitorGroup;
                             * if (visitorGroup != null)
                             * {
                             *  visitorGroup.AddUser(spUser);
                             * }
                             */
                        }
                    }
                    catch (Exception ex)
                    {
                        ProviderLogging.LogError(ex);
                    }
                    finally
                    {
                        elevatedWeb.Update();
                    }

                    elevatedWeb.AllowUnsafeUpdates = false;
                }
            });
            //}));
        }