Ejemplo n.º 1
0
        public void Validate(LabRequest request, out LabResponse response)
        {
            bool isHavePrivilege = true;

            response = new LabResponse();
            try
            {
                if (request.Data.FormMedicalID == 0)
                {
                    errorFields.Add("Form Medical ID");
                }

                if (request.Data.LabItemsId.Count == 0)
                {
                    errorFields.Add("Lab Item");
                }

                if (errorFields.Any())
                {
                    response.Status  = false;
                    response.Message = string.Format(Messages.ValidationErrorFields, String.Join(",", errorFields));
                }

                //cek is lab item inside form nedical Id already filled
                var _qryFormExamineLab = _unitOfWork.RegistrationRepository.GetFirstOrDefault(x => x.FormMedicalID == request.Data.FormMedicalID);
                if (_qryFormExamineLab != null)
                {
                    if (_qryFormExamineLab.Status == (int)RegistrationStatusEnum.Finish)
                    {
                        response.Status  = false;
                        response.Message = Messages.LabItemCannotChange;
                    }
                }

                isHavePrivilege = IsHaveAuthorization(ADD_PRIVILEGE_NAME, request.Data.Account.Privileges.PrivilegeIDs);
                if (!isHavePrivilege)
                {
                    response.Status  = false;
                    response.Message = Messages.UnauthorizedAccess;
                }
            }
            catch (Exception ex)
            {
                response.Status  = false;
                response.Message = ex.Message;
            }


            if (response.Status)
            {
                response = new LabHandler(_unitOfWork, _context).CreateOrEdit(request);
            }
        }
        /// <summary>
        /// Runs through the B2C acquire token silent flow with local account
        /// </summary>
        /// <param name="controller">The test framework that will execute the test interaction</param>
        public void B2CLocalAccountAcquireTokenSilentTest(
            ITestController controller,
            LabResponse labResponse,
            string testToRun)
        {
            B2CLocalAccountAcquireTokenInteractiveTestHelper(
                controller,
                labResponse,
                testToRun);

            VerifyResult(controller);
        }
        public static async Task <IAccount> AssertSingleAccountAsync(
            LabResponse labResponse,
            IPublicClientApplication pca,
            AuthenticationResult result)
        {
            Assert.IsFalse(string.IsNullOrWhiteSpace(result.AccessToken));
            var account = (await pca.GetAccountsAsync().ConfigureAwait(false)).Single();

            Assert.AreEqual(labResponse.User.HomeUPN, account.Username);

            return(account);
        }
        /// <summary>
        /// Runs through the standard acquire token flow, using the login prompt behavior. The ui behavior of "login" is used by default.
        /// </summary>
        /// <param name="controller">The test framework that will execute the test interaction</param>
        public void AcquireTokenTestHelper(
            ITestController controller,
            LabResponse labResponse,
            string testToRun)
        {
            PerformSignInFlow(
                controller,
                labResponse.User,
                testToRun);

            VerifyResult(controller);
        }
Ejemplo n.º 5
0
        public async Task MultiUserCacheCompatabilityTestAsync()
        {
            // Arrange

            //Acquire AT for default lab account
            LabResponse labResponseDefault = await LabUserHelper.GetDefaultUserAsync().ConfigureAwait(false);

            AuthenticationResult defaultAccountResult = await RunTestForUserAsync(labResponseDefault).ConfigureAwait(false);

            //Acquire AT for ADFS 2019 account
            LabResponse labResponseFederated = await LabUserHelper.GetAdfsUserAsync(FederationProvider.ADFSv2019, true).ConfigureAwait(false);

            var federatedAccountResult = await RunTestForUserAsync(labResponseFederated, false).ConfigureAwait(false);

            //Acquire AT for MSA account
            LabResponse labResponseMsa = await LabUserHelper.GetMsaUserAsync().ConfigureAwait(false);

            labResponseMsa.App.AppId = LabApiConstants.MSAOutlookAccountClientID;
            var msaAccountResult = await RunTestForUserAsync(labResponseMsa).ConfigureAwait(false);

            PublicClientApplication pca = PublicClientApplicationBuilder.Create(labResponseDefault.App.AppId).BuildConcrete();

            AuthenticationResult authResult = await pca.AcquireTokenSilent(new[] { CoreUiTestConstants.DefaultScope }, defaultAccountResult.Account)
                                              .ExecuteAsync()
                                              .ConfigureAwait(false);

            Assert.IsNotNull(authResult);
            Assert.IsNotNull(authResult.AccessToken);
            Assert.IsNotNull(authResult.IdToken);
            TestCommon.ValidateNoKerberosTicketFromAuthenticationResult(authResult);

            pca = PublicClientApplicationBuilder.Create(labResponseFederated.App.AppId).BuildConcrete();

            authResult = await pca.AcquireTokenSilent(new[] { CoreUiTestConstants.DefaultScope }, federatedAccountResult.Account)
                         .ExecuteAsync()
                         .ConfigureAwait(false);

            Assert.IsNotNull(authResult);
            Assert.IsNotNull(authResult.AccessToken);
            Assert.IsNull(authResult.IdToken);
            TestCommon.ValidateNoKerberosTicketFromAuthenticationResult(authResult);

            pca = PublicClientApplicationBuilder.Create(LabApiConstants.MSAOutlookAccountClientID).BuildConcrete();

            authResult = await pca.AcquireTokenSilent(new[] { CoreUiTestConstants.DefaultScope }, msaAccountResult.Account)
                         .ExecuteAsync()
                         .ConfigureAwait(false);

            Assert.IsNotNull(authResult);
            Assert.IsNotNull(authResult.AccessToken);
            Assert.IsNull(authResult.IdToken);
            TestCommon.ValidateNoKerberosTicketFromAuthenticationResult(authResult);
        }
Ejemplo n.º 6
0
        public async Task Interactive_Arlington_MultiCloudSupport_AADAsync()
        {
            // Arrange
            LabResponse labResponse = await LabUserHelper.GetArlingtonUserAsync().ConfigureAwait(false);

            IPublicClientApplication pca = PublicClientApplicationBuilder
                                           .Create(labResponse.App.AppId)
                                           .WithRedirectUri(SeleniumWebUI.FindFreeLocalhostRedirectUri())
                                           .WithAuthority("https://login.microsoftonline.com/common")
                                           .WithMultiCloudSupport(true)
                                           .WithTestLogging()
                                           .Build();

            Trace.WriteLine("Part 1 - Acquire a token interactively");
            AuthenticationResult result = await pca
                                          .AcquireTokenInteractive(s_scopes)
                                          .WithCustomWebUi(CreateSeleniumCustomWebUI(labResponse.User, Prompt.SelectAccount, false))
                                          .ExecuteAsync(new CancellationTokenSource(_interactiveAuthTimeout).Token)
                                          .ConfigureAwait(false);

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Account);
            Assert.IsNotNull(result.Account.GetTenantProfiles());
            Assert.IsTrue(result.Account.GetTenantProfiles().Any());
            Assert.AreEqual(labResponse.User.Upn, result.Account.Username);
            Assert.IsTrue(labResponse.Lab.Authority.Contains(result.Account.Environment));

            Trace.WriteLine("Part 2 - Get Accounts");
            var accounts = await pca.GetAccountsAsync().ConfigureAwait(false);

            Assert.IsNotNull(accounts);
            Assert.IsNotNull(accounts.Single());

            var account = accounts.Single();

            Assert.IsNotNull(account.GetTenantProfiles());
            Assert.IsTrue(account.GetTenantProfiles().Any());
            Assert.AreEqual(labResponse.User.Upn, account.Username);
            Assert.AreEqual("login.microsoftonline.us", account.Environment);

            Trace.WriteLine("Part 3 - Acquire a token silently");
            result = await pca
                     .AcquireTokenSilent(s_scopes, result.Account)
                     .ExecuteAsync(CancellationToken.None)
                     .ConfigureAwait(false);

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Account);
            Assert.IsNotNull(result.Account.GetTenantProfiles());
            Assert.IsTrue(result.Account.GetTenantProfiles().Any());
            Assert.IsTrue(labResponse.Lab.Authority.Contains(result.Account.Environment));
        }
Ejemplo n.º 7
0
        private async Task CreateSSHCertTestAsync(LabResponse labResponse)
        {
            IPublicClientApplication pca = PublicClientApplicationBuilder
                                           .Create(labResponse.App.AppId)
                                           .WithRedirectUri(SeleniumWebUI.FindFreeLocalhostRedirectUri())
                                           .Build();

            TokenCacheAccessRecorder userCacheAccess = pca.UserTokenCache.RecordAccess();

            Trace.WriteLine("Part 1 - Acquire an SSH cert interactively ");
            string jwk = CreateJwk();

            AuthenticationResult result = await pca
                                          .AcquireTokenInteractive(s_scopes)
                                          .WithCustomWebUi(CreateSeleniumCustomWebUI(labResponse.User, Prompt.ForceLogin))
                                          .WithSSHCertificateAuthenticationScheme(jwk, "key1")
                                          .WithExtraQueryParameters(GetTestSliceParams()) // TODO: remove this once feature is in PROD
                                          .ExecuteAsync(new CancellationTokenSource(_interactiveAuthTimeout).Token)
                                          .ConfigureAwait(false);

            userCacheAccess.AssertAccessCounts(0, 1);
            Assert.AreEqual("ssh-cert", result.TokenType);
            IAccount account = await MsalAssert.AssertSingleAccountAsync(labResponse, pca, result).ConfigureAwait(false);

            userCacheAccess.AssertAccessCounts(1, 1); // the assert calls GetAccounts

            Trace.WriteLine("Part 2 - Acquire a token silent with the same keyID - should be served from the cache");
            result = await pca
                     .AcquireTokenSilent(s_scopes, account)
                     .WithSSHCertificateAuthenticationScheme(jwk, "key1")
                     .WithExtraQueryParameters(GetTestSliceParams()) // TODO: remove this once feature is in PROD
                     .ExecuteAsync(new CancellationTokenSource(_interactiveAuthTimeout).Token)
                     .ConfigureAwait(false);

            userCacheAccess.AssertAccessCounts(2, 1);

            account = await MsalAssert.AssertSingleAccountAsync(labResponse, pca, result).ConfigureAwait(false);

            userCacheAccess.AssertAccessCounts(3, 1);

            Trace.WriteLine("Part 3 - Acquire a token silent with a different keyID - should not sbe served from the cache");
            result = await pca
                     .AcquireTokenSilent(s_scopes, account)
                     .WithSSHCertificateAuthenticationScheme(jwk, "key2")
                     .WithExtraQueryParameters(GetTestSliceParams()) // TODO: remove this once feature is in PROD
                     .ExecuteAsync(new CancellationTokenSource(_interactiveAuthTimeout).Token)
                     .ConfigureAwait(false);

            Assert.AreEqual("ssh-cert", result.TokenType);
            userCacheAccess.AssertAccessCounts(4, 2);
            await MsalAssert.AssertSingleAccountAsync(labResponse, pca, result).ConfigureAwait(false);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Runs through the B2C acquire token silent flow with Facebook identity provider
        /// </summary>
        /// <param name="controller">The test framework that will execute the test interaction</param>
        public void B2CFacebookAcquireTokenSilentTest(
            ITestController controller,
            LabResponse labResponse,
            string testToRun)
        {
            PerformB2CSignInFlow(
                controller,
                labResponse.User,
                B2CIdentityProvider.Facebook,
                testToRun);

            VerifyResult(controller);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Runs through the B2C acquire token flow with Google Provider
        /// </summary>
        public void B2CGoogleAcquireTokenInteractiveTestHelper(
            ITestController controller,
            LabResponse labResponse,
            string testToRun)
        {
            PerformB2CSignInFlow(
                controller,
                labResponse.User,
                B2CIdentityProvider.Google,
                testToRun);

            VerifyResult(controller);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Runs through the B2C acquire token ROPC flow with local acount
        /// </summary>
        /// <param name="controller">The test framework that will execute the test interaction</param>
        public void B2CAcquireTokenROPCTest(ITestController controller, LabResponse labResponse)
        {
            SetB2CInputDataForROPC(controller);

            controller.Tap(_acquirePageId);
            controller.Tap(CoreUiTestConstants.ROPCUsernameId, XamarinSelector.ByAutomationId);
            controller.EnterText(CoreUiTestConstants.ROPCUsernameId, labResponse.User.Upn, XamarinSelector.ByAutomationId);
            controller.Tap(CoreUiTestConstants.ROPCPasswordId, XamarinSelector.ByAutomationId);
            controller.EnterText(CoreUiTestConstants.ROPCPasswordId, labResponse.User.GetOrFetchPassword(), XamarinSelector.ByAutomationId);
            controller.Tap(CoreUiTestConstants.AcquireTokenByRopcButtonId, XamarinSelector.ByAutomationId);

            VerifyResult(controller);
        }
        public async Task Interactive_AdfsV3_FederatedAsync()
        {
            // Arrange
            UserQuery query = new UserQuery
            {
                FederationProvider = FederationProvider.AdfsV4,
                IsMamUser          = false,
                IsMfaUser          = false,
                IsFederatedUser    = true
            };

            LabResponse labResponse = await LabUserHelper.GetLabUserDataAsync(query).ConfigureAwait(false);

            await RunTestForUserAsync(labResponse).ConfigureAwait(false);
        }
        public async Task AcquireTokenFromAdfsUsernamePasswordAsync()
        {
            LabResponse labResponse = await LabUserHelper.GetAdfsUserAsync(FederationProvider.ADFSv2019, true).ConfigureAwait(false);

            var user = labResponse.User;

            SecureString securePassword = new NetworkCredential("", user.GetOrFetchPassword()).SecurePassword;

            var msalPublicClient            = PublicClientApplicationBuilder.Create(Adfs2019LabConstants.PublicClientId).WithAdfsAuthority(Adfs2019LabConstants.Authority).Build();
            AuthenticationResult authResult = await msalPublicClient.AcquireTokenByUsernamePassword(s_scopes, user.Upn, securePassword).ExecuteAsync().ConfigureAwait(false);

            Assert.IsNotNull(authResult);
            Assert.IsNotNull(authResult.AccessToken);
            Assert.IsNotNull(authResult.IdToken);
        }
        public static async Task <IAccount> AssertSingleAccountAsync(
            LabResponse labResponse,
            IPublicClientApplication pca,
            AuthenticationResult result)
        {
            Assert.IsFalse(string.IsNullOrWhiteSpace(result.AccessToken));
            var account = (await pca.GetAccountsAsync().ConfigureAwait(false)).Single();

            Assert.IsTrue(
                string.Equals(
                    labResponse.User.Upn,
                    result.Account.Username,
                    System.StringComparison.InvariantCultureIgnoreCase));

            return(account);
        }
        private async Task <AuthenticationResult> RunTestForUserAsync(LabResponse labResponse, string authority)
        {
            var cert = await s_secretProvider.GetCertificateWithPrivateMaterialAsync(
                CertificateName, KeyVaultInstance.MsalTeam).ConfigureAwait(false);

            IConfidentialClientApplication cca;
            string redirectUri = SeleniumWebUI.FindFreeLocalhostRedirectUri();

            cca = ConfidentialClientApplicationBuilder
                  .Create(ConfidentialClientID)
                  .WithAuthority(authority)
                  .WithCertificate(cert)
                  .WithRedirectUri(redirectUri)
                  .WithTestLogging()
                  .Build();

            Trace.WriteLine("Part 1 - Call GetAuthorizationRequestUrl to figure out where to go ");
            var startUri = await cca
                           .GetAuthorizationRequestUrl(s_scopes)
                           .ExecuteAsync()
                           .ConfigureAwait(false);

            Trace.WriteLine("Part 2 - Use a browser to login and to capture the authorization code ");
            var seleniumUi = new SeleniumWebUI((driver) =>
            {
                Trace.WriteLine("Starting Selenium automation");
                driver.PerformLogin(labResponse.User, Prompt.SelectAccount, false, false);
            }, TestContext);

            CancellationTokenSource cts = new CancellationTokenSource(s_timeout);
            Uri authCodeUri             = await seleniumUi.AcquireAuthorizationCodeAsync(
                startUri,
                new Uri(redirectUri),
                cts.Token)
                                          .ConfigureAwait(false);

            var authorizationResult = AuthorizationResult.FromUri(authCodeUri.AbsoluteUri);

            Assert.AreEqual(AuthorizationStatus.Success, authorizationResult.Status);

            Trace.WriteLine("Part 3 - Get a token using the auth code, just like a website");
            var result = await cca.AcquireTokenByAuthorizationCode(s_scopes, authorizationResult.Code)
                         .ExecuteAsync()
                         .ConfigureAwait(false);

            return(result);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Runs through the standard acquire token silent flow
        /// </summary>
        /// <param name="controller">The test framework that will execute the test interaction</param>
        public void AcquireTokenSilentTestHelper(ITestController controller, LabResponse labResponse)
        {
            //acquire token for 1st resource
            AcquireTokenInteractiveHelper(controller, labResponse, CoreUiTestConstants.UiBehaviorLogin);
            VerifyResult(controller);

            controller.Tap(CoreUiTestConstants.SelectUser, XamarinSelector.ByAutomationId);
            controller.Tap(labResponse.User.Upn);

            if (_platform == Xamarin.UITest.Platform.iOS)
            {
                controller.Tap("Done");
            }

            controller.Tap(CoreUiTestConstants.AcquireTokenSilentButtonId);
            VerifyResult(controller);
        }
Ejemplo n.º 16
0
        public async Task GetTokenByAuthCode_HybridSPA_Async()
        {
            // Arrange
            LabResponse labResponse = await LabUserHelper.GetHybridSpaAccontAsync().ConfigureAwait(false);

            var result = await RunTestForUserAsync(labResponse.App.AppId, labResponse,
                                                   "https://login.microsoftonline.com/f645ad92-e38d-4d1a-b510-d1b09a74a8ca", false,
                                                   "http://localhost:3000/auth/implicit-redirect").ConfigureAwait(false);

            Assert.IsNotNull(result.SpaAuthCode);

            result = await RunTestForUserAsync(labResponse.App.AppId, labResponse,
                                               "https://login.microsoftonline.com/f645ad92-e38d-4d1a-b510-d1b09a74a8ca", false,
                                               "http://localhost:3000/auth/implicit-redirect", false).ConfigureAwait(false);

            Assert.IsNull(result.SpaAuthCode);
        }
Ejemplo n.º 17
0
        private static async Task <LabUserData> GetPublicAadUserDataAsync()
        {
            var         api         = new LabServiceApi();
            LabResponse labResponse = (await api.GetLabResponseFromApiAsync(UserQuery.PublicAadUserQuery).ConfigureAwait(false));

            return(new LabUserData(
                       labResponse.User.Upn,
                       labResponse.User.GetOrFetchPassword(),
                       labResponse.User.AppId,
                       labResponse.User.TenantId));

            //return new LabUserData(
            //    "user",
            //    "",
            //    "1d18b3b0-251b-4714-a02a-9956cec86c2d",
            //    "49f548d0-12b7-4169-a390-bb5304d24462");
        }
Ejemplo n.º 18
0
        [Timeout(1 * 60 * 1000)] // 1 min timeout
        public async Task DeviceCodeFlowTestAsync()
        {
            LabResponse labResponse = LabUserHelper.GetDefaultUser();

            Trace.WriteLine("Calling AcquireTokenWithDeviceCodeAsync");
            PublicClientApplication pca = new PublicClientApplication(labResponse.AppId);
            var result = await pca.AcquireTokenWithDeviceCodeAsync(Scopes, deviceCodeResult =>
            {
                RunAutomatedDeviceCodeFlow(deviceCodeResult, labResponse.User);

                return(Task.FromResult(0));
            }).ConfigureAwait(false);

            Trace.WriteLine("Running asserts");

            Assert.IsNotNull(result);
            Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken));
        }
        [Timeout(1 * 60 * 1000)] // 1 min timeout
        public async Task DeviceCodeFlowTestAsync()
        {
            LabResponse labResponse = await LabUserHelper.GetDefaultUserAsync().ConfigureAwait(false);

            Trace.WriteLine("Calling AcquireTokenWithDeviceCodeAsync");
            var pca    = PublicClientApplicationBuilder.Create(labResponse.AppId).Build();
            var result = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult =>
            {
                RunAutomatedDeviceCodeFlow(deviceCodeResult, labResponse.User);

                return(Task.FromResult(0));
            }).ExecuteAsync(CancellationToken.None).ConfigureAwait(false);

            Trace.WriteLine("Running asserts");

            Assert.IsNotNull(result);
            Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken));
        }
Ejemplo n.º 20
0
        public LabResponse GetDataExamine(long poliID)
        {
            var response          = new LabResponse {
            };
            var _getformMedicalId = _unitOfWork.RegistrationRepository.GetById(poliID);
            var _qry = _unitOfWork.FormExamineRepository.Get(x => x.FormMedicalID == _getformMedicalId.FormMedicalID).FirstOrDefault();

            if (_qry != null)
            {
                if (response.Entity == null)
                {
                    response.Entity = new FormExamineLabModel();
                }
                response.Entity.FormExamine = Mapper.Map <FormExamine, FormExamineModel>(_qry);
            }

            return(response);
        }
Ejemplo n.º 21
0
        public void ValidateAddResult(LabRequest request, out LabResponse response)
        {
            bool isHavePrivilege = true;

            response = new LabResponse();
            try
            {
                if (request.Data.FormMedicalID == 0)
                {
                    errorFields.Add("Form Medical ID");
                }

                if (request.Data.LabItemCollsJs.Count == 0)
                {
                    errorFields.Add("Lab Result");
                }

                if (errorFields.Any())
                {
                    response.Status  = false;
                    response.Message = string.Format(Messages.ValidationErrorFields, String.Join(",", errorFields));
                }



                isHavePrivilege = IsHaveAuthorization(ADD_RESULT_PRIVILEGE_NAME, request.Data.Account.Privileges.PrivilegeIDs);
                if (!isHavePrivilege)
                {
                    response.Status  = false;
                    response.Message = Messages.UnauthorizedAccess;
                }
            }
            catch (Exception ex)
            {
                response.Status  = false;
                response.Message = ex.Message;
            }


            if (response.Status)
            {
                response = new LabHandler(_unitOfWork, _context).CreateLabResult(request);
            }
        }
        private async Task KerberosAcquireTokenWithDeviceCodeFlowAsync(LabResponse labResponse, string userType, KerberosTicketContainer ticketContainer)
        {
            Trace.WriteLine($"Calling KerberosAcquireTokenWithDeviceCodeFlowAsync with {0}", userType);
            var builder = PublicClientApplicationBuilder.Create(labResponse.App.AppId)
                          .WithTestLogging()
                          .WithTenantId(labResponse.Lab.TenantId)
                          .WithClientId(TestConstants.KerberosTestApplicationId)
                          .WithKerberosTicketClaim(TestConstants.KerberosServicePrincipalName, ticketContainer);

            switch (labResponse.User.AzureEnvironment)
            {
            case AzureEnvironment.azureusgovernment:
                builder.WithAuthority(labResponse.Lab.Authority + labResponse.Lab.TenantId);
                break;

            default:
                break;
            }

            var pca             = builder.Build();
            var userCacheAccess = pca.UserTokenCache.RecordAccess();

            var result = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult =>
            {
                SeleniumExtensions.PerformDeviceCodeLogin(deviceCodeResult, labResponse.User, TestContext, false);
                return(Task.FromResult(0));
            }).ExecuteAsync(CancellationToken.None).ConfigureAwait(false);

            Trace.WriteLine("Running asserts");

            userCacheAccess.AssertAccessCounts(0, 1);
            Assert.IsFalse(userCacheAccess.LastAfterAccessNotificationArgs.IsApplicationCache);

            Assert.IsNotNull(result);
            Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken));

            KerberosSupplementalTicket ticket = TestCommon.GetValidatedKerberosTicketFromAuthenticationResult(
                result,
                ticketContainer,
                labResponse.User.Upn);

            Assert.IsNotNull(ticket);
            TestCommon.ValidateKerberosWindowsTicketCacheOperation(ticket);
        }
Ejemplo n.º 23
0
        private void AcquireTokenInteractiveHelper(
            ITestController controller,
            LabResponse labResponse,
            string promptBehavior)
        {
            PrepareForAuthentication(controller);
            SetInputData(controller, labResponse.AppId, CoreUiTestConstants.DefaultScope, promptBehavior);
            PerformSignInFlow(controller, labResponse.User);

            // on consent, also hit the accept button
            if (promptBehavior == CoreUiTestConstants.UiBehaviorConsent)
            {
                AppWebResult consentHeader = controller.WaitForWebElementByCssId("consentHeader").FirstOrDefault();
                Assert.IsNotNull(consentHeader);
                Assert.IsTrue(consentHeader.TextContent.Contains("Permissions requested"));

                controller.Tap(CoreUiTestConstants.WebSubmitId, XamarinSelector.ByHtmlIdAttribute);
            }
        }
Ejemplo n.º 24
0
        [Timeout(2 * 60 * 1000)] // 2 min timeout
        public async Task DeviceCodeFlowTestAsync()
        {
            LabResponse labResponse = await LabUserHelper.GetDefaultUserAsync().ConfigureAwait(false);

            Trace.WriteLine("Calling AcquireTokenWithDeviceCodeAsync");
            var pca             = PublicClientApplicationBuilder.Create(labResponse.AppId).Build();
            var userCacheAccess = pca.UserTokenCache.RecordAccess();

            var result = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult =>
            {
                SeleniumExtensions.PerformDeviceCodeLogin(deviceCodeResult, labResponse.User, TestContext, false);
                return(Task.FromResult(0));
            }).ExecuteAsync(CancellationToken.None).ConfigureAwait(false);

            Trace.WriteLine("Running asserts");

            userCacheAccess.AssertAccessCounts(0, 1);
            Assert.IsNotNull(result);
            Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken));
        }
Ejemplo n.º 25
0
        private async Task AcquireTokenWithDeviceCodeFlowAsync(LabResponse labResponse, string userType)
        {
            Trace.WriteLine($"Calling AcquireTokenWithDeviceCodeAsync with {0}", userType);
            var pca             = PublicClientApplicationBuilder.Create(labResponse.App.AppId).Build();
            var userCacheAccess = pca.UserTokenCache.RecordAccess();

            var result = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult =>
            {
                SeleniumExtensions.PerformDeviceCodeLogin(deviceCodeResult, labResponse.User, TestContext, false);
                return(Task.FromResult(0));
            }).ExecuteAsync(CancellationToken.None).ConfigureAwait(false);

            Trace.WriteLine("Running asserts");

            userCacheAccess.AssertAccessCounts(0, 1);
            Assert.IsFalse(userCacheAccess.LastNotificationArgs.IsApplicationCache);

            Assert.IsNotNull(result);
            Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken));
        }
        [Timeout(2 * 60 * 1000)] // 2 min timeout
        public async Task DeviceCodeFlowAdfsTestAsync()
        {
            LabResponse labResponse = await LabUserHelper.GetAdfsUserAsync(FederationProvider.ADFSv2019, true).ConfigureAwait(false);

            Trace.WriteLine("Calling AcquireTokenWithDeviceCodeAsync");
            PublicClientApplication pca = PublicClientApplicationBuilder.Create(Adfs2019LabConstants.PublicClientId)
                                          .WithRedirectUri(Adfs2019LabConstants.ClientRedirectUri)
                                          .WithAdfsAuthority(Adfs2019LabConstants.Authority)
                                          .BuildConcrete();
            var result = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult =>
            {
                SeleniumExtensions.PerformDeviceCodeLogin(deviceCodeResult, labResponse.User, TestContext, true);
                return(Task.FromResult(0));
            }).ExecuteAsync().ConfigureAwait(false);

            Trace.WriteLine("Running asserts");

            Assert.IsNotNull(result);
            Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken));
        }
Ejemplo n.º 27
0
        public void PromptBehaviorTestHelperWithConsent(ITestController controller, LabResponse labResponse)
        {
            // 1. Acquire token with uiBehavior set to consent
            AcquireTokenInteractiveTestHelper(
                controller,
                labResponse,
                CoreUiTestConstants.UiBehaviorConsent);

            // 2. Switch ui behavior to "select account"
            SetUiBehavior(controller, CoreUiTestConstants.UiBehaviorSelectAccount);

            // 3. Hit Acquire Token directly since we are not changing any other setting
            controller.Tap(CoreUiTestConstants.AcquireTokenButtonId);

            // 4. The web UI should display all users, so click on the current user
            controller.Tap(labResponse.User.Upn, XamarinSelector.ByHtmlValue);

            // 5. Validate token again
            VerifyResult(controller);
        }
        private async Task ValidateAuthResultAsync(
            AuthenticationResult authResult,
            LabResponse labResponse)
        {
            MsalAssert.AssertAuthResult(authResult, labResponse.User);
            var at1 = authResult.AccessToken;

            // If test fails with "user needs to consent to the application, do an interactive request" error - see UsernamePassword tests

            Trace.WriteLine("Part 2 - Acquire a token silently, with forceRefresh = true");
            IAccount account = await MsalAssert.AssertSingleAccountAsync(labResponse, pca, authResult).ConfigureAwait(false);

            authResult = await pca.AcquireTokenSilent(s_scopes, account)
                         .WithForceRefresh(true)
                         .ExecuteAsync()
                         .ConfigureAwait(false);

            MsalAssert.AssertAuthResult(authResult, labResponse.User);
            var at2 = authResult.AccessToken;

            Assert.AreEqual(
                $"https://login.microsoftonline.com/{labResponse.User.TenantId}/oauth2/v2.0/token",
                authResult.AuthenticationResultMetadata.TokenEndpoint);

            Trace.WriteLine("Part 3 - Acquire a token silently with a login hint, with forceRefresh = true");
            authResult = await pca.AcquireTokenSilent(s_scopes, labResponse.User.Upn)
                         .WithForceRefresh(true)
                         .ExecuteAsync()
                         .ConfigureAwait(false);

            MsalAssert.AssertAuthResult(authResult, labResponse.User);
            var at3 = authResult.AccessToken;

            Assert.IsFalse(at1.Equals(at2, System.StringComparison.InvariantCultureIgnoreCase));
            Assert.IsFalse(at1.Equals(at3, System.StringComparison.InvariantCultureIgnoreCase));
            Assert.IsFalse(at2.Equals(at3, System.StringComparison.InvariantCultureIgnoreCase));
            Assert.AreEqual(TokenSource.IdentityProvider, authResult.AuthenticationResultMetadata.TokenSource);
            Assert.AreEqual(
                $"https://login.microsoftonline.com/{labResponse.User.TenantId}/oauth2/v2.0/token",
                authResult.AuthenticationResultMetadata.TokenEndpoint);
        }
Ejemplo n.º 29
0
        public JsonResult AddLabResult()
        {
            LabResponse         response = new LabResponse();
            FormExamineLabModel _model   = new FormExamineLabModel();

            if (Request.Form["FormMedicalID"] != null)
            {
                _model.FormMedicalID = Convert.ToInt64(Request.Form["FormMedicalId"].ToString());
            }
            if (Request.Form["LabResults"] != null)
            {
                _model.LabItemCollsJs = JsonConvert.DeserializeObject <List <LabItemResultJS> >(Request.Form["LabResults"]);
            }
            if (Session["UserLogon"] != null)
            {
                _model.Account = (AccountModel)Session["UserLogon"];
            }
            _model.FormExamine = new FormExamineModel
            {
                DoctorID = Request.Form["Doctor"] == null ? 0 : Convert.ToInt32(Request.Form["Doctor"].ToString()),
                Result   = Request.Form["Conclusion"]
            };

            if (Session["QueuePoliId"] != null)
            {
                if (_model.LoketData == null)
                {
                    _model.LoketData = new LoketModel();
                }
                _model.LoketData.Id = Convert.ToInt64(Session["QueuePoliId"].ToString());
            }

            var request = new LabRequest
            {
                Data = _model
            };

            new LabValidator(_unitOfWork, _context).ValidateAddResult(request, out response);
            return(Json(new { Status = response.Status, Message = response.Message }, JsonRequestBehavior.AllowGet));
        }
        private async Task RunTestForUserAsync(LabResponse labResponse)
        {
            var pca = PublicClientApplicationBuilder
                      .Create(labResponse.AppId)
                      .WithRedirectUri(SeleniumWebUI.FindFreeLocalhostRedirectUri())
                      .Build();

            Trace.WriteLine("Part 1 - Acquire a token interactively, no login hint");
            AuthenticationResult result = await pca
                                          .AcquireTokenInteractive(s_scopes)
                                          .WithCustomWebUi(CreateSeleniumCustomWebUI(labResponse.User, Prompt.SelectAccount, false))
                                          .ExecuteAsync(new CancellationTokenSource(_interactiveAuthTimeout).Token)
                                          .ConfigureAwait(false);

            IAccount account = await MsalAssert.AssertSingleAccountAsync(labResponse, pca, result).ConfigureAwait(false);

            Trace.WriteLine("Part 2 - Clear the cache");
            await pca.RemoveAsync(account).ConfigureAwait(false);

            Assert.IsFalse((await pca.GetAccountsAsync().ConfigureAwait(false)).Any());

            Trace.WriteLine("Part 3 - Acquire a token interactively again, with login hint");
            result = await pca
                     .AcquireTokenInteractive(s_scopes)
                     .WithCustomWebUi(CreateSeleniumCustomWebUI(labResponse.User, Prompt.ForceLogin, true))
                     .WithPrompt(Prompt.ForceLogin)
                     .WithLoginHint(labResponse.User.HomeUPN)
                     .ExecuteAsync(new CancellationTokenSource(_interactiveAuthTimeout).Token)
                     .ConfigureAwait(false);

            account = await MsalAssert.AssertSingleAccountAsync(labResponse, pca, result).ConfigureAwait(false);

            Trace.WriteLine("Part 4 - Acquire a token silently");
            result = await pca
                     .AcquireTokenSilent(s_scopes, account)
                     .ExecuteAsync(CancellationToken.None)
                     .ConfigureAwait(false);

            await MsalAssert.AssertSingleAccountAsync(labResponse, pca, result).ConfigureAwait(false);
        }