Exemplo n.º 1
0
        public async Task GetAccounts_WamAccount_NoCacheAccounts_WebRequest_Async()
        {
            // Arrange
            using (MockHttpAndServiceBundle harness = CreateTestHarness())
            {
                const string User1Upn           = "*****@*****.**";
                var          wamAccountProvider = new WebAccountProvider("id", User1Upn, null);
                _webAccountProviderFactory.GetAccountProviderAsync("organizations").Returns(wamAccountProvider);
                var wamAccount = new WebAccount(wamAccountProvider, "*****@*****.**", WebAccountState.Connected);
                _wamProxy.FindAllWebAccountsAsync(wamAccountProvider, TestConstants.ClientId).Returns(new[] { wamAccount });
                _wamProxy.TryGetAccountProperty(wamAccount, "Authority", out string _).Returns(x =>
                {
                    x[2] = TestConstants.AuthorityCommonTenant;
                    return(true);
                });
                var rq = new Client.Internal.RequestContext(harness.ServiceBundle, Guid.NewGuid(), default);
                _cacheSessionManager.RequestContext.Returns(rq);

                _instanceDiscoveryManager.GetMetadataEntryTryAvoidNetworkAsync(
                    Arg.Any <AuthorityInfo>(),
                    Arg.Any <IEnumerable <string> >(), rq)
                .Returns(CreateEntryForSingleAuthority(new Uri(TestConstants.AuthorityCommonTenant)));     // user set this authority in config

                // Setup for the silent token request we're going to do via WAM
                _webAccountProviderFactory.GetAccountProviderAsync(TestConstants.AuthorityCommonTenant).Returns(wamAccountProvider);
                IWebTokenRequestResultWrapper webTokenResponseWrapper = CreateSuccessResponse(wamAccount);

                var newlyAddedAccountToCache = new Account("Id_From_ESTS", "upn", null);
                _wamProxy.GetTokenSilentlyAsync(wamAccount, Arg.Any <WebTokenRequest>()).Returns(webTokenResponseWrapper);
                _cacheSessionManager.SaveTokenResponseAsync(Arg.Any <MsalTokenResponse>()).Returns(Task.FromResult(
                                                                                                       new Tuple <MsalAccessTokenCacheItem, MsalIdTokenCacheItem, Account>(null, null, newlyAddedAccountToCache)));

                // Act
                var accounts = await _aadPlugin.GetAccountsAsync(
                    TestConstants.ClientId,
                    AuthorityInfo.FromAuthorityUri(TestConstants.AuthorityCommonTenant, true),
                    _cacheSessionManager,
                    _instanceDiscoveryManager).ConfigureAwait(false);

                // Assert
                Assert.AreEqual(1, accounts.Count());
                Assert.AreEqual("Id_From_ESTS", accounts.Single().HomeAccountId.Identifier);
            }
        }
Exemplo n.º 2
0
        private async Task <Account> GetIdFromWebResponseAsync(string clientId, WebAccount webAccount, InstanceDiscoveryMetadataEntry envMetadata, ICacheSessionManager cacheManager)
        {
            MsalTokenResponse response = await AcquireBasicTokenSilentAsync(
                webAccount,
                clientId).ConfigureAwait(false);

            if (response != null)
            {
                var tuple = await cacheManager.SaveTokenResponseAsync(response).ConfigureAwait(false);

                _logger.InfoPii(
                    $"[WAM AAD Provider] ConvertToMsalAccountOrNullAsync resolved account {webAccount.UserName} via web call? {tuple?.Item3 != null}",
                    $"[WAM AAD Provider] ConvertToMsalAccountOrNullAsync resolved account via web call? {tuple?.Item3 != null}");

                return(tuple.Item3); // Account
            }

            return(null);
        }