public static async Task <ValidationResponse> ValidateAsync(LoginModel login, Cache cache)
        {
            try
            {
                var client = new SigRClient(Settings.AdminSiteUrl, Settings.STSApiKey, "SiteHub");

                var domainName = login.UserName.Split('@')[1].ToLower();

                var site = await SiteCache.GetSiteByDomain(cache, domainName);

                var cred = new STSCredential
                {
                    Domain       = site.OnPremDomainName,
                    UserName     = login.UserName,
                    Password     = login.Password,
                    RemoteSiteId = site.Id
                };

                await client.StartAsync();

                ValidationResponse res = await client.ProcessSTSValidationRequest(cred);

                return(res);
            }
            catch (Exception ex)
            {
                Utils.AddLogEntry("Error during user validation", System.Diagnostics.EventLogEntryType.Error, 0, ex);
                return(new ValidationResponse
                {
                    IsValid = false
                });
            }
        }
        /// <summary>
        /// Called by the STS to send a validation request down to the appropriate site. Uses a semaphore to wait
        /// for the response
        /// </summary>
        /// <param name="credential"></param>
        /// <returns></returns>
        public async Task <ValidationResponse> ProcessSTSValidationRequest(STSCredential credential)
        {
            SendStatus("Processing STS validation request for \"{0}\"...", credential.UserName);
            validationWaiter.UserName = credential.UserName;

            await _siteHubProxy.Invoke <STSCredential>("ProcessSTSValidationRequest", credential);

            return(await validationWaiter.Awaiter.Task);
        }
        /// <summary>
        /// Site will validate the user's local AD credentials for the cloud STS
        /// </summary>
        /// <param name="credential"></param>
        /// <returns></returns>
        public static ValidationResponse GetValidationResponse(STSCredential credential)
        {
            var data = new ValidationResponse();

            data.UserName        = credential.UserName;
            data.STSConnectionId = credential.STSConnectionId;

            // create a "principal context" - e.g. your domain (could be machine, too)
            using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, credential.Domain))
            {
                // validate the credentials
                data.IsValid = pc.ValidateCredentials(credential.UserName, credential.Password, ContextOptions.Sealing);
            }
            if (data.IsValid)
            {
                data.UserProperties = ADTools.SearchName(credential.UserName);
            }
            return(data);
        }
コード例 #4
0
 /// <summary>
 /// When a validation request is received from the STS, this method forwards the request to the appropriate site
 /// </summary>
 /// <param name="credential"></param>
 public void ProcessSTSValidationRequest(STSCredential credential)
 {
     credential.STSConnectionId = Context.ConnectionId;
     Clients.Group(credential.RemoteSiteId).Validate(credential);
 }