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); }
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)); }
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); }