Beispiel #1
0
        public JsonTests()
        {
            _oAuth2ResponseBase     = InitOAuth2ResponseBase(new OAuth2ResponseBase());
            _oAuth2ResponseBaseJson = JsonHelper.SerializeToJson <OAuth2ResponseBase>(_oAuth2ResponseBase);

            _msalTokenResponse     = InitMsalTokenResponse(new MsalTokenResponse());
            _msalTokenResponseJson = JsonHelper.SerializeToJson <MsalTokenResponse>(_msalTokenResponse);

            _instanceDiscoveryResponse     = InitInstanceDiscoveryResponse(new InstanceDiscoveryResponse());
            _instanceDiscoveryResponseJson = JsonHelper.SerializeToJson <InstanceDiscoveryResponse>(_instanceDiscoveryResponse);
        }
        public T WithInstanceDicoveryMetadata(string instanceDiscoveryJson)
        {
            if (string.IsNullOrEmpty(instanceDiscoveryJson))
            {
                throw new ArgumentNullException(instanceDiscoveryJson);
            }

            try
            {
                InstanceDiscoveryResponse instanceDiscovery = JsonHelper.DeserializeFromJson <InstanceDiscoveryResponse>(instanceDiscoveryJson);
                Config.CustomInstanceDiscoveryMetadata = instanceDiscovery;
                return((T)this);
            }
            catch (JsonException ex)
            {
                throw new MsalClientException(
                          MsalError.InvalidUserInstanceMetadata,
                          MsalErrorMessage.InvalidUserInstanceMetadata,
                          ex);
            }
        }
Beispiel #3
0
        private InstanceDiscoveryResponse InitInstanceDiscoveryResponse(InstanceDiscoveryResponse instanceDiscoveryResponse)
        {
            int entries = 30;

            instanceDiscoveryResponse.TenantDiscoveryEndpoint = TestConstants.DiscoveryEndPoint;
            instanceDiscoveryResponse.Metadata = new InstanceDiscoveryMetadataEntry[entries];

            InitOAuth2ResponseBase(instanceDiscoveryResponse);

            for (int i = 0; i < entries; i++)
            {
                instanceDiscoveryResponse.Metadata[i] = new InstanceDiscoveryMetadataEntry
                {
                    Aliases          = new[] { "login.windows.net", "login.microsoftonline.com" },
                    PreferredCache   = "login.windows.net",
                    PreferredNetwork = "login.microsoftonline.com"
                };
            }

            return(instanceDiscoveryResponse);
        }
        public async Task NetworkProviderIsCalledLastAsync()
        {
            // Arrange
            _staticMetadataProvider = new StaticMetadataProvider();

            _discoveryManager = new InstanceDiscoveryManager(
                _harness.HttpManager,
                _harness.ServiceBundle.TelemetryManager,
                false,
                _knownMetadataProvider,
                _staticMetadataProvider,
                _networkMetadataProvider);

            var otherEnvs = new[] { "env1", "env2" };
            InstanceDiscoveryResponse discoveryResponse = new InstanceDiscoveryResponse
            {
                Metadata = new[] { _expectedResult }
            };
            var authorityUri = new Uri(Authority);

            // No response from the static and known provider
            _knownMetadataProvider
            .GetMetadata("some_env.com", otherEnvs)
            .Returns((InstanceDiscoveryMetadataEntry)null);
            _networkMetadataProvider
            .FetchAllDiscoveryMetadataAsync(authorityUri, _testRequestContext)
            .Returns(discoveryResponse);

            // Act
            InstanceDiscoveryMetadataEntry actualResult = await _discoveryManager.GetMetadataEntryTryAvoidNetworkAsync(
                "https://some_env.com/tid",
                otherEnvs,
                _testRequestContext)
                                                          .ConfigureAwait(false);

            // Assert
            Assert.AreSame(_expectedResult, actualResult, "The known metadata provider should be queried second");
            _knownMetadataProvider.Received(1).GetMetadata("some_env.com", otherEnvs);
            _ = _networkMetadataProvider.Received(1).FetchAllDiscoveryMetadataAsync(authorityUri, _testRequestContext);
        }
        public async Task VerifyAnotherHostByInstanceDiscoveryAsync(string host, string tenant, CallState callState)
        {
            string instanceDiscoveryEndpoint = this.InstanceDiscoveryEndpoint;

            instanceDiscoveryEndpoint += ("?api-version=1.0&authorization_endpoint=" + AuthorizeEndpointTemplate);
            instanceDiscoveryEndpoint  = instanceDiscoveryEndpoint.Replace("{host}", host);
            instanceDiscoveryEndpoint  = instanceDiscoveryEndpoint.Replace("{tenant}", tenant);

            try
            {
                var client = new AdalHttpClient(instanceDiscoveryEndpoint, callState);
                InstanceDiscoveryResponse discoveryResponse = await client.GetResponseAsync <InstanceDiscoveryResponse>(ClientMetricsEndpointType.InstanceDiscovery);

                if (discoveryResponse.TenantDiscoveryEndpoint == null)
                {
                    throw new AdalException(AdalError.AuthorityNotInValidList);
                }
            }
            catch (AdalServiceException ex)
            {
                throw new AdalException((ex.ErrorCode == "invalid_instance") ? AdalError.AuthorityNotInValidList : AdalError.AuthorityValidationFailed, ex);
            }
        }