static int Main(string[] args) { Utils.SetTraceListener(new ConsoleTraceListener()); try { var persistentAuthHelper = new PersistentAuthHelper(); if (args.Length > 0) { var _parameters = new CommandLineParameters(args); var verb = _parameters.Get(0, "verb"); if (String.Equals(verb, "login", StringComparison.OrdinalIgnoreCase)) { var env = _parameters.Get(1, requires: false); _parameters.ThrowIfUnknown(); persistentAuthHelper.AzureEnvironments = env == null ? AzureEnvironments.Prod : (AzureEnvironments)Enum.Parse(typeof(AzureEnvironments), args[1], ignoreCase: true); persistentAuthHelper.AcquireTokens().Wait(); return(0); } else if (String.Equals(verb, "listcache", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); EnsureTokenCache(persistentAuthHelper); foreach (var line in persistentAuthHelper.DumpTokenCache()) { Console.WriteLine(line); } return(0); } else if (String.Equals(verb, "clearcache", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); persistentAuthHelper.ClearTokenCache(); return(0); } else if (String.Equals(verb, "token", StringComparison.OrdinalIgnoreCase)) { var tenantId = _parameters.Get(1, requires: false); _parameters.ThrowIfUnknown(); EnsureTokenCache(persistentAuthHelper); if (tenantId != null) { if (tenantId.StartsWith("ey")) { DumpClaims(tenantId); return(0); } EnsureGuidFormat(tenantId); } TokenCacheInfo cacheInfo = persistentAuthHelper.GetToken(tenantId, Constants.CSMResource).Result; var bearer = cacheInfo.CreateAuthorizationHeader(); Clipboard.SetText(bearer); DumpClaims(cacheInfo.AccessToken); Console.WriteLine(); Console.WriteLine("Token copied to clipboard successfully."); return(0); } else if (String.Equals(verb, "spn", StringComparison.OrdinalIgnoreCase)) { var tenantId = _parameters.Get(1, keyName: "tenant"); EnsureGuidFormat(tenantId); var appId = _parameters.Get(2, keyName: "appId"); EnsureGuidFormat(appId); var appKey = _parameters.Get(3, keyName: "appKey", requires: false); if (appKey == null) { appKey = PromptForPassword("appKey"); } _parameters.ThrowIfUnknown(); persistentAuthHelper.AzureEnvironments = AzureEnvironments.Prod; var cacheInfo = persistentAuthHelper.GetTokenBySpn(tenantId, appId, appKey).Result; return(0); } else if (String.Equals(verb, "upn", StringComparison.OrdinalIgnoreCase)) { var username = _parameters.Get(1, keyName: "username"); var password = _parameters.Get(2, keyName: "password", requires: false); if (password == null) { password = PromptForPassword("password"); } _parameters.ThrowIfUnknown(); persistentAuthHelper.AzureEnvironments = AzureEnvironments.Prod; var cacheInfo = persistentAuthHelper.GetTokenByUpn(username, password).Result; return(0); } else if (String.Equals(verb, "get", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "delete", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "put", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "post", StringComparison.OrdinalIgnoreCase)) { var path = _parameters.Get(1, keyName: "url"); var verbose = _parameters.Get("-verbose", requires: false) != null; if (!verbose) { Trace.Listeners.Clear(); } var uri = EnsureAbsoluteUri(path, persistentAuthHelper); if (!persistentAuthHelper.IsCacheValid()) { persistentAuthHelper.AzureEnvironments = GetAzureEnvironments(uri); persistentAuthHelper.AcquireTokens().Wait(); } var content = ParseHttpContent(verb, _parameters); _parameters.ThrowIfUnknown(); var subscriptionId = GetTenantOrSubscription(uri); TokenCacheInfo cacheInfo = persistentAuthHelper.GetToken(subscriptionId, null).Result; return(HttpInvoke(uri, cacheInfo, verb, verbose, content).Result); } else { throw new CommandLineException(String.Format("Parameter '{0}' is invalid!", verb)); } } PrintUsage(); return(1); } catch (Exception ex) { DumpException(ex); return(-1); } }
static int Main(string[] args) { // ensure Tls12 if ((ServicePointManager.SecurityProtocol & SecurityProtocolType.Tls12) != SecurityProtocolType.Tls12) { ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; } if (Utils.GetSkipSslVerify()) { ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); }; } Utils.SetTraceListener(new ConsoleTraceListener()); try { var persistentAuthHelper = new PersistentAuthHelper(); if (args.Length > 0) { var _parameters = new CommandLineParameters(args); var verb = _parameters.Get(0, "verb"); if (String.Equals(verb, "login", StringComparison.OrdinalIgnoreCase)) { var env = _parameters.Get(1, requires: false); _parameters.ThrowIfUnknown(); persistentAuthHelper.SetAzureEnvironment(!string.IsNullOrEmpty(env) ? env : Utils.GetDefaultEnv()); persistentAuthHelper.AcquireTokens().Wait(); return(0); } else if (String.Equals(verb, "azlogin", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); persistentAuthHelper.SetAzureEnvironment(Constants.ARMProdEnv); persistentAuthHelper.AzLogin().Wait(); return(0); } else if (String.Equals(verb, "listcache", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); EnsureTokenCache(persistentAuthHelper); foreach (var line in persistentAuthHelper.DumpTokenCache()) { Console.WriteLine(line); } return(0); } else if (String.Equals(verb, "clearcache", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); persistentAuthHelper.ClearTokenCache(); return(0); } else if (String.Equals(verb, "token", StringComparison.OrdinalIgnoreCase)) { var tenantId = _parameters.Get(1, requires: false); if (tenantId == null) { var accessToken = Utils.GetDefaultToken(); if (!String.IsNullOrEmpty(accessToken)) { _parameters.ThrowIfUnknown(); DumpClaims(accessToken); Console.WriteLine(); return(0); } } if (tenantId != null && tenantId.StartsWith("ey")) { _parameters.ThrowIfUnknown(); DumpClaims(tenantId); return(0); } EnsureTokenCache(persistentAuthHelper); TokenCacheInfo cacheInfo; if (Uri.TryCreate(tenantId, UriKind.Absolute, out _)) { // https://vault.azure.net (no trailing /) // https://graph.windows.net (no trailing /) // https://management.core.windows.net/ _parameters.ThrowIfUnknown(); cacheInfo = persistentAuthHelper.GetTokenByResource(tenantId).Result; } else { var resource = _parameters.Get(2, requires: false); if (!string.IsNullOrEmpty(resource) && !Uri.TryCreate(resource, UriKind.Absolute, out _)) { throw new CommandLineException($"Parameter '{resource}' must be resource uri!"); } _parameters.ThrowIfUnknown(); cacheInfo = persistentAuthHelper.GetToken(tenantId, resource).Result; } var bearer = cacheInfo.CreateAuthorizationHeader(); Clipboard.SetText(cacheInfo.AccessToken); DumpClaims(cacheInfo.AccessToken); Console.WriteLine(); Console.WriteLine("Token copied to clipboard successfully."); return(0); } else if (String.Equals(verb, "spn", StringComparison.OrdinalIgnoreCase)) { var tenantId = _parameters.Get(1, keyName: "tenant"); var appId = _parameters.Get(2, keyName: "appId"); EnsureGuidFormat(appId); X509Certificate2 certificate = null; var appKey = _parameters.Get(3, keyName: "appKey", requires: false); string resource = null; if (appKey != null && appKey.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) { resource = appKey; appKey = _parameters.Get(4, keyName: "appKey", requires: false); } if (appKey == null) { appKey = PromptForPassword("appKey"); } else { if (File.Exists(appKey)) { var password = _parameters.Get(4, keyName: "password", requires: false); if (password == null) { password = appKey + ".txt"; if (!File.Exists(password)) { password = PromptForPassword("password"); } } if (File.Exists(password)) { certificate = new X509Certificate2(appKey, File.ReadAllText(password)); } else { certificate = new X509Certificate2(appKey, password); } } } if (certificate == null) { appKey = Utils.EnsureBase64Key(appKey); } _parameters.ThrowIfUnknown(); persistentAuthHelper.SetAzureEnvironment(Utils.GetDefaultEnv()); var cacheInfo = certificate != null? persistentAuthHelper.GetTokenBySpn(tenantId, appId, certificate, resource).Result: persistentAuthHelper.GetTokenBySpn(tenantId, appId, appKey, resource).Result; return(0); } else if (String.Equals(verb, "upn", StringComparison.OrdinalIgnoreCase)) { var username = _parameters.Get(1, keyName: "username"); var password = _parameters.Get(2, keyName: "password", requires: false); if (password == null) { password = PromptForPassword("password"); } _parameters.ThrowIfUnknown(); persistentAuthHelper.SetAzureEnvironment(Utils.GetDefaultEnv()); var cacheInfo = persistentAuthHelper.GetTokenByUpn(username, password).Result; return(0); } else if (String.Equals(verb, "get", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "delete", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "put", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "post", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "patch", StringComparison.OrdinalIgnoreCase)) { var path = _parameters.Get(1, keyName: "url"); var verbose = _parameters.Get("-verbose", requires: false) != null || Utils.GetDefaultVerbose(); if (!verbose) { Trace.Listeners.Clear(); } var content = ParseHttpContent(verb, _parameters); var headers = _parameters.GetValue <Dictionary <string, List <string> > >("-h", requires: false); var http2 = _parameters.Get("-http2", requires: false) != null; _parameters.ThrowIfUnknown(); var uri = Utils.EnsureAbsoluteUri(path, persistentAuthHelper); var accessToken = Utils.GetDefaultToken(); if (!String.IsNullOrEmpty(accessToken)) { return(HttpInvoke(uri, new TokenCacheInfo { AccessToken = accessToken }, verb, verbose, content, headers, http2).Result); } var env = ARMConfiguration.GetEnvironmentByRequest(uri) ?? Utils.GetDefaultEnv(); if (!persistentAuthHelper.IsCacheValid() || !string.Equals(env, persistentAuthHelper.ARMConfiguration.AzureEnvironment, StringComparison.OrdinalIgnoreCase)) { persistentAuthHelper.SetAzureEnvironment(env); persistentAuthHelper.AcquireTokens().Wait(); } var resource = GetResource(uri, persistentAuthHelper.ARMConfiguration); var subscriptionId = GetTenantOrSubscription(uri); var cacheInfo = persistentAuthHelper.GetToken(subscriptionId, resource).Result ?? persistentAuthHelper.GetTokenByResource(resource).Result; return(HttpInvoke(uri, cacheInfo, verb, verbose, content, headers, http2).Result); } else { throw new CommandLineException(String.Format("Parameter '{0}' is invalid!", verb)); } } PrintUsage(); return(1); } catch (Exception ex) { DumpException(ex); return(-1); } }
static int Main(string[] args) { Utils.SetTraceListener(new ConsoleTraceListener()); try { var persistentAuthHelper = new PersistentAuthHelper(); if (args.Length > 0) { var _parameters = new CommandLineParameters(args); var verb = _parameters.Get(0, "verb"); if (String.Equals(verb, "login", StringComparison.OrdinalIgnoreCase)) { var env = _parameters.Get(1, requires: false); _parameters.ThrowIfUnknown(); persistentAuthHelper.AzureEnvironments = env == null?Utils.GetDefaultEnv() : (AzureEnvironments)Enum.Parse(typeof(AzureEnvironments), args[1], ignoreCase: true); persistentAuthHelper.AcquireTokens().Wait(); return(0); } else if (String.Equals(verb, "azlogin", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); persistentAuthHelper.AzureEnvironments = AzureEnvironments.Prod; persistentAuthHelper.AzLogin().Wait(); return(0); } else if (String.Equals(verb, "listcache", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); EnsureTokenCache(persistentAuthHelper); foreach (var line in persistentAuthHelper.DumpTokenCache()) { Console.WriteLine(line); } return(0); } else if (String.Equals(verb, "clearcache", StringComparison.OrdinalIgnoreCase)) { _parameters.ThrowIfUnknown(); persistentAuthHelper.ClearTokenCache(); return(0); } else if (String.Equals(verb, "token", StringComparison.OrdinalIgnoreCase)) { var tenantId = _parameters.Get(1, requires: false); _parameters.ThrowIfUnknown(); if (tenantId == null) { var accessToken = Utils.GetDefaultToken(); if (!String.IsNullOrEmpty(accessToken)) { DumpClaims(accessToken); Console.WriteLine(); return(0); } } if (tenantId != null && tenantId.StartsWith("ey")) { DumpClaims(tenantId); return(0); } EnsureTokenCache(persistentAuthHelper); persistentAuthHelper.AzureEnvironments = Utils.GetDefaultEnv(); TokenCacheInfo cacheInfo; Uri resourceUri = null; if (Uri.TryCreate(tenantId, UriKind.Absolute, out resourceUri)) { // https://vault.azure.net (no trailing /) // https://graph.windows.net (no trailing /) // https://management.core.windows.net/ cacheInfo = persistentAuthHelper.GetTokenByResource(tenantId).Result; } else { cacheInfo = persistentAuthHelper.GetToken(tenantId, null).Result; } var bearer = cacheInfo.CreateAuthorizationHeader(); Clipboard.SetText(cacheInfo.AccessToken); DumpClaims(cacheInfo.AccessToken); Console.WriteLine(); Console.WriteLine("Token copied to clipboard successfully."); return(0); } else if (String.Equals(verb, "spn", StringComparison.OrdinalIgnoreCase)) { var tenantId = _parameters.Get(1, keyName: "tenant"); var appId = _parameters.Get(2, keyName: "appId"); EnsureGuidFormat(appId); X509Certificate2 certificate = null; var appKey = _parameters.Get(3, keyName: "appKey", requires: false); if (appKey == null) { appKey = PromptForPassword("appKey"); } else { if (File.Exists(appKey)) { var password = _parameters.Get(4, keyName: "password", requires: false); if (password == null) { password = PromptForPassword("password"); } certificate = new X509Certificate2(appKey, password); } } if (certificate == null) { appKey = Utils.EnsureBase64Key(appKey); } _parameters.ThrowIfUnknown(); persistentAuthHelper.AzureEnvironments = Utils.GetDefaultEnv(); var cacheInfo = certificate != null? persistentAuthHelper.GetTokenBySpn(tenantId, appId, certificate).Result: persistentAuthHelper.GetTokenBySpn(tenantId, appId, appKey).Result; return(0); } else if (String.Equals(verb, "upn", StringComparison.OrdinalIgnoreCase)) { var username = _parameters.Get(1, keyName: "username"); var password = _parameters.Get(2, keyName: "password", requires: false); if (password == null) { password = PromptForPassword("password"); } _parameters.ThrowIfUnknown(); persistentAuthHelper.AzureEnvironments = Utils.GetDefaultEnv(); var cacheInfo = persistentAuthHelper.GetTokenByUpn(username, password).Result; return(0); } else if (String.Equals(verb, "get", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "delete", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "put", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "post", StringComparison.OrdinalIgnoreCase) || String.Equals(verb, "patch", StringComparison.OrdinalIgnoreCase)) { var path = _parameters.Get(1, keyName: "url"); var verbose = _parameters.Get("-verbose", requires: false) != null || Utils.GetDefaultVerbose(); if (!verbose) { Trace.Listeners.Clear(); } var content = ParseHttpContent(verb, _parameters); var headers = _parameters.GetValue <Dictionary <string, List <string> > >("-h", requires: false); _parameters.ThrowIfUnknown(); var uri = Utils.EnsureAbsoluteUri(path, persistentAuthHelper); var accessToken = Utils.GetDefaultToken(); if (!String.IsNullOrEmpty(accessToken)) { return(HttpInvoke(uri, new TokenCacheInfo { AccessToken = accessToken }, verb, verbose, content, headers).Result); } var env = GetAzureEnvironments(uri, persistentAuthHelper); if (!persistentAuthHelper.IsCacheValid() || persistentAuthHelper.AzureEnvironments != env) { persistentAuthHelper.AzureEnvironments = env; persistentAuthHelper.AcquireTokens().Wait(); } var resource = GetResource(uri, env); var subscriptionId = GetTenantOrSubscription(uri); TokenCacheInfo cacheInfo = persistentAuthHelper.GetToken(subscriptionId, resource).Result; return(HttpInvoke(uri, cacheInfo, verb, verbose, content, headers).Result); } else { throw new CommandLineException(String.Format("Parameter '{0}' is invalid!", verb)); } } PrintUsage(); return(1); } catch (Exception ex) { DumpException(ex); return(-1); } }