Пример #1
0
        internal static void CacheExpirationMarginTest(Sts sts)
        {
            SetCredential(sts);
            var context = new AuthenticationContextProxy(sts.Authority, sts.ValidateAuthority);
            AuthenticationResultProxy result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, sts.ValidDefaultRedirectUri, PromptBehaviorProxy.Auto, sts.ValidUserId);

            VerifySuccessResult(sts, result);

            AuthenticationContextProxy.Delay(2000);   // 2 seconds delay

            AuthenticationContextProxy.SetCredentials(null, null);

            var userId = (result.UserInfo != null) ? new UserIdentifier(result.UserInfo.DisplayableId, UserIdentifierType.OptionalDisplayableId) : UserIdentifier.AnyUser;

            AuthenticationResultProxy result2 = context.AcquireToken(sts.ValidResource, sts.ValidClientId, sts.ValidDefaultRedirectUri, PromptBehaviorProxy.Auto, userId, SecondCallExtraQueryParameter);

            VerifySuccessResult(sts, result2);
            VerifyExpiresOnAreEqual(result, result2);

            var dummyContext = new AuthenticationContext("https://dummy/dummy", false);

            AdalFriend.UpdateTokenExpiryOnTokenCache(dummyContext.TokenCache, DateTime.UtcNow + TimeSpan.FromSeconds(4 * 60 + 50));

            result2 = context.AcquireToken(sts.ValidResource, sts.ValidClientId, sts.ValidDefaultRedirectUri, PromptBehaviorProxy.Auto, userId);
            VerifySuccessResult(sts, result2);
            Verify.AreNotEqual(result.AccessToken, result2.AccessToken);
        }
Пример #2
0
        public static ClientAssertion CreateClientAssertion(string authority, string clientId, string certificateName, string certificatePassword)
        {
            string audience = authority.Replace("login", "sts");

            // Test fails with out this
            if (!audience.EndsWith(@"/"))
            {
                audience += @"/";
            }

            ClientAssertion assertion = AdalFriend.CreateJwt(new X509Certificate2(certificateName, certificatePassword), clientId, audience);

            return(new ClientAssertion(clientId, assertion.Assertion));
        }
Пример #3
0
        private AuthenticationResultProxy RunTaskInteractive(string resource, string clientId, Uri redirectUri, PromptBehaviorProxy promptBehaviorProxy, UserIdentifier userId, string extraQueryParameters, int retryCount = 0)
        {
            AuthenticationResultProxy resultProxy;

            try
            {
                AuthenticationResult result = null;
                using (Timer abortTest = new Timer(10 * 1000)) // 10 seconds for test execution
                {
                    using (Timer uiSupply = new Timer(250))
                    {
                        if (userName != null || password != null)
                        {
                            uiSupply.Elapsed += UiSupplyEventHandler;
                        }

                        abortTest.Elapsed += (sender, e) => UiAbortEventHandler(sender, e, uiSupply);

                        uiSupply.Start();
                        abortTest.Start();

                        if (promptBehaviorProxy == PromptBehaviorProxy.AccessCodeOnly)
                        {
                            string authorizationCode = AdalFriend.AcquireAccessCode(this.context, resource, clientId,
                                                                                    redirectUri, userId);
                            return(new AuthenticationResultProxy()
                            {
                                AccessToken = authorizationCode
                            });
                        }

                        PromptBehavior promptBehavior = (promptBehaviorProxy == PromptBehaviorProxy.RefreshSession)
                            ? PromptBehavior.RefreshSession
                            : (promptBehaviorProxy == PromptBehaviorProxy.Always)
                                ? PromptBehavior.Always
                                : (promptBehaviorProxy == PromptBehaviorProxy.Never)
                                    ? PromptBehavior.Never
                                    : PromptBehavior.Auto;

                        if (userId != null && !ReferenceEquals(userId, UserIdentifier.AnyUser) && userId.Id == NotSpecified)
                        {
                            if (promptBehaviorProxy == PromptBehaviorProxy.NotSpecified)
                            {
                                result = context.AcquireToken(resource, clientId, redirectUri);
                            }
                            else
                            {
                                result = context.AcquireToken(resource, clientId, redirectUri, promptBehavior);
                            }
                        }
                        else
                        {
                            if (extraQueryParameters == NotSpecified)
                            {
                                result = context.AcquireToken(resource, clientId, redirectUri, promptBehavior, userId);
                            }
                            else
                            {
                                result = context.AcquireToken(resource, clientId, redirectUri, promptBehavior, userId, extraQueryParameters);
                            }
                        }

                        abortTest.Stop();
                        uiSupply.Stop();
                    }
                }

                resultProxy = GetAuthenticationResultProxy(result);
            }
            catch (Exception ex)
            {
                resultProxy = GetAuthenticationResultProxy(ex);
                if (resultProxy.ExceptionStatusCode == 503 && retryCount < 5)
                {
                    Thread.Sleep(3000);
                    Log.Comment(string.Format("Retry #{0}...", retryCount + 1));
                    return(RunTaskInteractive(resource, clientId, redirectUri, promptBehaviorProxy, userId, extraQueryParameters, retryCount + 1));
                }
            }

            return(resultProxy);
        }