public async Task ProbeShouldFetchTokenWithClientIdFromManagedIdentityServiceAsync()
        {
            var handler = new MockManagedIdentityHttpMessageHandler();

            handler.Responders.Add(new Responder
            {
                Matcher = (req, state) =>
                {
                    var tokenEndpoint = Constants.ManagedIdentityTokenEndpoint;
                    var apiVersion    = Constants.ManagedIdentityVMApiVersion;
                    return(req.RequestUri.ToString() == tokenEndpoint + "?resource=https://management.azure.com/&client_id=foo&api-version=" + apiVersion);
                },
                MockResponse = (req, state) =>
                {
                    var resp = new HttpResponseMessage(HttpStatusCode.OK)
                    {
                        Content = new MockJsonContent(AzureManagementVMManagedIdentityJson)
                    };
                    return(resp);
                }
            });
            var client = new HttpClient(handler);
            var config = FakeConfiguration(new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>(Constants.AzureClientIdEnvName, "foo"),
            });
            var provider = new ManagedIdentityTokenProvider(httpClient: client, config: config);
            var token    = await provider.GetTokenAsync(new List <string> {
                "https://management.azure.com/.default"
            }).ConfigureAwait(false);

            Assert.IsNotNull(token);
            var seconds         = double.Parse(ExpiresOn, CultureInfo.InvariantCulture);
            var startOfUnixTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

            Assert.AreEqual(token.ExpiresOn, startOfUnixTime.AddSeconds(seconds));
            Assert.AreEqual(AccessToken, token.AccessToken);
        }
Example #2
0
        public async Task ProbeShouldFetchTokenFromAppServiceManagedIdentityServiceAsync()
        {
            var handler = new MockManagedIdentityHttpMessageHandler();

            handler.Responders.Add(new Responder
            {
                Matcher = (req, state) =>
                {
                    var apiVersion = Constants.ManagedIdentityAppServiceApiVersion;
                    return(req.RequestUri.ToString() == "http://127.0.0.1/foo?resource=https://management.azure.com/&api-version=" + apiVersion &&
                           req.Headers.GetValues("Secret").FirstOrDefault() == "secret");
                },
                MockResponse = (req, state) =>
                {
                    var resp = new HttpResponseMessage(HttpStatusCode.OK)
                    {
                        Content = new MockJsonContent(AzureAppServiceManagedIdentityJson)
                    };
                    return(resp);
                }
            });
            var client = new HttpClient(handler);
            var config = FakeConfiguration(new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>(Constants.ManagedIdentityEndpointEnvName, "http://127.0.0.1/foo"),
                new KeyValuePair <string, string>(Constants.ManagedIdentitySecretEnvName, "secret")
            });
            var provider = new ManagedIdentityTokenProvider(httpClient: client, config: config);
            var token    = await provider.GetTokenAsync(new List <string> {
                "https://management.azure.com/.default"
            }).ConfigureAwait(false);

            Assert.IsNotNull(token);
            Assert.AreEqual(DateTimeOffset.Parse("4/10/19 6:27:14 AM +00:00", CultureInfo.InvariantCulture), token.ExpiresOn);
            Assert.AreEqual(AccessToken, token.AccessToken);
        }