private bool TryGetTenantForSubscription(string subscriptionId, out string tenantId)
{
tenantId = string.Empty;
var requestUri = string.Format(Constants.SubscriptionTemplate, Constants.CSMUrl, subscriptionId, Constants.CSMApiVersion);
var request = WebRequest.CreateHttp(requestUri);
using (var response = request.GetResponseWithoutExceptions())
{
if (response.StatusCode != HttpStatusCode.Unauthorized)
{
System.Diagnostics.Trace.TraceError(string.Format("Expected status {0} != {1} GET {2}", HttpStatusCode.Unauthorized, response.StatusCode, requestUri));
return false;
}
var header = response.Headers["WWW-Authenticate"];
if (header == null || string.IsNullOrEmpty(header))
{
System.Diagnostics.Trace.TraceError(string.Format("Missing WWW-Authenticate response header GET {0}", requestUri));
return false;
}
// WWW-Authenicate: Bearer authorization_uri="https://login.windows.net/{tenantId}", error="invalid_token", error_description="The access token is missing or invalid."
var index = header.IndexOf("authorization_uri=", StringComparison.OrdinalIgnoreCase);
if (index == -1)
{
System.Diagnostics.Trace.TraceError(string.Format("Invalid WWW-Authenticate response header {0} GET {1}", header, requestUri));
return false;
}
tenantId =
header.Substring(index).Split(new[] { '\"', '=' }, StringSplitOptions.RemoveEmptyEntries)
.Skip(1)
.Take(1)
.Select(s => new Uri(s).AbsolutePath.Trim('/'))
.First();
return !string.IsNullOrEmpty(tenantId);
}
}