public void AcquireTokenWithPromptBehaviorNeverTestAsync() { // TODO: Not fully working at this point due to session cookies being deleted between WAB calls. Sts sts = Sts; // Should not be able to get a token silently passing redirectUri. var context = new AuthenticationContextProxy(sts.Authority, sts.ValidateAuthority); AuthenticationResultProxy result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, sts.ValidDefaultRedirectUri, PromptBehaviorProxy.Never); AdalTests.VerifyErrorResult(result, Sts.InvalidArgumentError, "SSO"); AuthenticationContextProxy.SetCredentials(sts.ValidUserName, sts.ValidPassword); result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, sts.ValidDefaultRedirectUri); AdalTests.VerifySuccessResult(sts, result); AuthenticationContextProxy.ClearDefaultCache(); result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, sts.ValidDefaultRedirectUri); AdalTests.VerifySuccessResult(sts, result); // Should not be able to get a token silently on first try. result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, null, PromptBehaviorProxy.Never); AdalTests.VerifyErrorResult(result, Sts.UserInteractionRequired, null); AuthenticationContextProxy.SetCredentials(sts.ValidUserName, sts.ValidPassword); // Obtain a token interactively. result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, null); AdalTests.VerifySuccessResult(sts, result); // Obtain a token interactively. AuthenticationContextProxy.ClearDefaultCache(); result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, null); AdalTests.VerifySuccessResult(sts, result); AuthenticationContextProxy.SetCredentials(null, null); // Now there should be a token available in the cache so token should be available silently. result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, null, PromptBehaviorProxy.Never); AdalTests.VerifySuccessResult(sts, result); // Clear the cache and silent auth should work via session cookies. AuthenticationContextProxy.ClearDefaultCache(); result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, null, PromptBehaviorProxy.Never); AdalTests.VerifySuccessResult(sts, result); // Clear the cache and cookies and silent auth should fail. AuthenticationContextProxy.ClearDefaultCache(); AdalTests.EndBrowserDialogSession(); result = context.AcquireToken(sts.ValidResource, sts.ValidClientId, null, PromptBehaviorProxy.Never); AdalTests.VerifyErrorResult(result, Sts.UserInteractionRequired, null); }
public async void Button_Click(object sender, RoutedEventArgs e) { try { CommandProxy proxy = CommandProxy.Deserialize(Parameters.Text); AuthenticationResultProxy result = await CommandExecuter.ExecuteAsync(proxy); Result.Text = result.Serialize(); } catch (Exception ex) { Result.Text = "Exception thrown: " + ex.Message; } }
private static void VerifySuccessResultAndTokenContent(Sts sts, AuthenticationResultProxy result, bool supportRefreshToken = true, bool supportUserInfo = true) { VerifySuccessResult(sts, result, supportRefreshToken, supportUserInfo); }
public static async Task <AuthenticationResultProxy> ExecuteAsync(CommandProxy proxy) { AuthenticationResultProxy resultProxy = null; AuthenticationResult result = null; foreach (var command in proxy.Commands) { var arg = command.Arguments; switch (command.CommandType) { case CommandType.ClearDefaultTokenCache: { var dummyContext = new AuthenticationContext("https://dummy/dummy", false); dummyContext.TokenCache.Clear(); break; } case CommandType.SetEnvironmentVariable: { var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; localSettings.Values[arg.EnvironmentVariable] = arg.EnvironmentVariableValue; break; } case CommandType.SetCorrelationId: { context.CorrelationId = arg.CorrelationId; break; } case CommandType.CreateContextA: { context = new AuthenticationContext(arg.Authority); break; } case CommandType.CreateContextAV: { context = new AuthenticationContext(arg.Authority, arg.ValidateAuthority); break; } case CommandType.CreateContextAVT: { TokenCache tokenCache = null; if (arg.TokenCacheType == TokenCacheType.InMemory) { tokenCache = new TokenCache() { // The default token cache in ADAL WinRT is persistent. This is how to make it in-memory only cache. BeforeAccess = delegate { }, AfterAccess = delegate { } }; } context = new AuthenticationContext(arg.Authority, arg.ValidateAuthority, tokenCache); break; } case CommandType.ClearUseCorporateNetwork: { //context.UseCorporateNetwork = false; break; } case CommandType.SetUseCorporateNetwork: { //context.UseCorporateNetwork = true; break; } case CommandType.AquireTokenAsyncRCUPa: { UserCredential credential = new UserCredential(arg.UserName); result = await context.AcquireTokenAsync(arg.Resource, arg.ClientId, credential); break; } case CommandType.AquireTokenAsyncRCRe: { result = await context.AcquireTokenAsync(arg.Resource, arg.ClientId, arg.RedirectUri); break; } case CommandType.AquireTokenAsyncRCRePUX: { result = await context.AcquireTokenAsync(arg.Resource, arg.ClientId, arg.RedirectUri, (arg.PromptBehavior == PromptBehaviorProxy.Always)?PromptBehavior.Always : (arg.PromptBehavior == PromptBehaviorProxy.Never)?PromptBehavior.Never : PromptBehavior.Auto, (arg.UserName != null)?new UserIdentifier(arg.UserName, UserIdentifierType.OptionalDisplayableId) : UserIdentifier.AnyUser, arg.Extra); break; } case CommandType.AquireTokenAsyncRCReP: { result = await context.AcquireTokenAsync(arg.Resource, arg.ClientId, arg.RedirectUri, (arg.PromptBehavior == PromptBehaviorProxy.Always)?PromptBehavior.Always : (arg.PromptBehavior == PromptBehaviorProxy.Never)?PromptBehavior.Never : PromptBehavior.Auto); break; } case CommandType.AquireTokenAsyncRCRePU: { result = await context.AcquireTokenAsync(arg.Resource, arg.ClientId, arg.RedirectUri, (arg.PromptBehavior == PromptBehaviorProxy.Always)?PromptBehavior.Always : (arg.PromptBehavior == PromptBehaviorProxy.Never)?PromptBehavior.Never : PromptBehavior.Auto, (arg.UserName != null)?new UserIdentifier(arg.UserName, UserIdentifierType.OptionalDisplayableId) : UserIdentifier.AnyUser); break; } case CommandType.AcquireTokenByRefreshTokenAsyncRC: { result = await context.AcquireTokenByRefreshTokenAsync(arg.RefreshToken, arg.ClientId); break; } case CommandType.AcquireTokenByRefreshTokenAsyncRCRe: { result = await context.AcquireTokenByRefreshTokenAsync(arg.RefreshToken, arg.ClientId, arg.Resource); break; } case CommandType.CreateFromResourceUrlAsync: { var parameters = await AuthenticationParameters.CreateFromResourceUrlAsync(new Uri(arg.Extra)); resultProxy = new AuthenticationResultProxy { AuthenticationParametersAuthority = parameters.Authority, AuthenticationParametersResource = parameters.Resource }; break; } case CommandType.CreateFromResponseAuthenticateHeader: { var parameters = AuthenticationParameters.CreateFromResponseAuthenticateHeader(arg.Extra); resultProxy = new AuthenticationResultProxy { AuthenticationParametersAuthority = parameters.Authority, AuthenticationParametersResource = parameters.Resource }; break; } /*case CommandType.AcquireTokenByRefreshTokenAsyncRCC: * { * result = await context.AcquireTokenByRefreshTokenAsync(arg.RefreshToken, arg.ClientId, * (arg.ClientId != null && arg.ClientSecret != null) ? new ClientCredential(arg.ClientId, arg.ClientSecret) : null); * break; * }*/ default: throw new Exception("Unknown command"); } } return(resultProxy ?? new AuthenticationResultProxy { AccessToken = result.AccessToken, AccessTokenType = result.AccessTokenType, ExpiresOn = result.ExpiresOn, IsMultipleResourceRefreshToken = result.IsMultipleResourceRefreshToken, RefreshToken = result.RefreshToken, IdToken = result.IdToken, TenantId = result.TenantId, UserInfo = result.UserInfo, Error = result.Error, ErrorDescription = result.ErrorDescription, Status = (result.Status == AuthenticationStatus.Success) ? AuthenticationStatusProxy.Success : ((result.Status == AuthenticationStatus.ClientError) ? AuthenticationStatusProxy.ClientError : AuthenticationStatusProxy.ServiceError) }); }