コード例 #1
0
        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);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
 private static void VerifySuccessResultAndTokenContent(Sts sts, AuthenticationResultProxy result, bool supportRefreshToken = true, bool supportUserInfo = true)
 {
     VerifySuccessResult(sts, result, supportRefreshToken, supportUserInfo);
 }
コード例 #4
0
        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)
            });
        }
 private static void VerifySuccessResultAndTokenContent(Sts sts, AuthenticationResultProxy result, bool supportRefreshToken = true, bool supportUserInfo = true)
 {
     VerifySuccessResult(sts, result, supportRefreshToken, supportUserInfo);
 }