Пример #1
0
        public static void SaveRecentEnv(AzureEnvs env)
        {
            var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".csm");

            Directory.CreateDirectory(path);
            File.WriteAllText(Path.Combine(path, "recent_env.txt"), env.ToString());
        }
Пример #2
0
        public static async Task AcquireToken(AzureEnvs env)
        {
            var tokenCache = new Dictionary <TokenCacheKey, string>();

            _env = new Lazy <AzureEnvs>(() => env);

            var authResult = await GetAuthorizationResult(tokenCache, AADTenantId);

            Console.WriteLine("Welcome {0} (Tenant: {1})", authResult.UserInfo.UserId, authResult.TenantId);

            var tenants = await GetTokenForTenants(tokenCache, authResult);

            SaveRecentEnv(env);
            SaveRecentToken(authResult);
            TokenCache.SaveCache(tokenCache);
        }
Пример #3
0
 private static Uri GetCSMUri(AzureEnvs envs)
 {
     if (envs == AzureEnvs.Next)
     {
         return(new Uri("https://api-next.resources.windows-int.net"));
     }
     else if (envs == AzureEnvs.Current)
     {
         return(new Uri("https://api-current.resources.windows-int.net"));
     }
     else if (envs == AzureEnvs.Dogfood)
     {
         return(new Uri("https://api-dogfood.resources.windows-int.net"));
     }
     else
     {
         return(new Uri("https://management.azure.com"));
     }
 }
Пример #4
0
        static int Main(string[] args)
        {
            try
            {
                if (args.Length > 0)
                {
                    if (String.Equals(args[0], "login", StringComparison.OrdinalIgnoreCase))
                    {
                        AzureEnvs env = AzureEnvs.Prod;
                        if (args.Length > 1)
                        {
                            env = (AzureEnvs)Enum.Parse(typeof(AzureEnvs), args[1], ignoreCase: true);
                        }
                        TokenUtils.AcquireToken(env).Wait();
                        return(0);
                    }
                    else if (String.Equals(args[0], "listcache", StringComparison.OrdinalIgnoreCase))
                    {
                        TokenUtils.DumpTokenCache();
                        return(0);
                    }
                    else if (String.Equals(args[0], "clearcache", StringComparison.OrdinalIgnoreCase))
                    {
                        TokenUtils.ClearTokenCache();
                        return(0);
                    }
                    else if (String.Equals(args[0], "token", StringComparison.OrdinalIgnoreCase))
                    {
                        AuthenticationResult authResult;
                        if (args.Length >= 2)
                        {
                            string    tenantId = Guid.Parse(args[1]).ToString();
                            string    user     = null;
                            AzureEnvs?env      = null;
                            if (args.Length >= 3)
                            {
                                user = args[2].Contains("@") ? args[2] : null;
                                env  = user == null ? (AzureEnvs?)Enum.Parse(typeof(AzureEnvs), args[2], true) : null;

                                if (args.Length >= 4)
                                {
                                    env  = env ?? (AzureEnvs)Enum.Parse(typeof(AzureEnvs), args[3], true);
                                    user = user ?? args[3];
                                }
                            }

                            authResult = TokenUtils.GetTokenByTenant(tenantId).Result;
                        }
                        else
                        {
                            authResult = TokenUtils.GetRecentToken().Result;
                        }

                        var bearer = authResult.CreateAuthorizationHeader();
                        Clipboard.SetText(bearer);
                        Console.WriteLine(bearer);
                        Console.WriteLine();
                        DumpClaims(authResult.AccessToken);
                        Console.WriteLine();
                        Console.WriteLine("Token copied to clipboard successfully.");
                        return(0);
                    }
                    else if (String.Equals(args[0], "spn", StringComparison.OrdinalIgnoreCase))
                    {
                        if (args.Length >= 4)
                        {
                            AzureEnvs env = AzureEnvs.Prod;
                            if (args.Length >= 5)
                            {
                                env = (AzureEnvs)Enum.Parse(typeof(AzureEnvs), args[4], ignoreCase: true);
                            }

                            string tenantId   = Guid.Parse(args[1]).ToString();
                            string appId      = Guid.Parse(args[2]).ToString();
                            string appKey     = args[3];
                            var    authResult = TokenUtils.GetTokenBySpn(tenantId, appId, appKey, env);
                            var    bearer     = authResult.CreateAuthorizationHeader();
                            Clipboard.SetText(bearer);
                            Console.WriteLine(bearer);
                            Console.WriteLine();
                            DumpClaims(authResult.AccessToken);
                            Console.WriteLine();
                            Console.WriteLine("Token copied to clipboard successfully.");
                            return(0);
                        }
                    }
                    else if (String.Equals(args[0], "get", StringComparison.OrdinalIgnoreCase) ||
                             String.Equals(args[0], "delete", StringComparison.OrdinalIgnoreCase) ||
                             String.Equals(args[0], "put", StringComparison.OrdinalIgnoreCase) ||
                             String.Equals(args[0], "post", StringComparison.OrdinalIgnoreCase))
                    {
                        if (args.Length >= 2)
                        {
                            Dictionary <string, string> parameters;
                            args = ParseArguments(args, out parameters);
                            var addOutputColor = !parameters.ContainsKey("-nocolor");
                            var verb           = args[0];
                            var uri            = new Uri(args[1]);

                            var subscriptionId = GetSubscription(uri);
                            AuthenticationResult authResult;
                            if (String.IsNullOrEmpty(subscriptionId))
                            {
                                authResult = TokenUtils.GetRecentToken().Result;
                            }
                            else
                            {
                                authResult = TokenUtils.GetTokenBySubscription(subscriptionId).Result;
                            }

                            string content = null;
                            string file    = null;
                            if (parameters.TryGetValue("-content", out file))
                            {
                                content = File.ReadAllText(file);
                            }
                            HttpInvoke(uri, authResult, verb, addOutputColor, content).Wait();
                            return(0);
                        }
                    }
                }

                PrintUsage();
                return(1);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return(-1);
            }
        }
Пример #5
0
        public static AuthenticationResult GetTokenBySpn(string tenantId, string appId, string appKey, AzureEnvs env)
        {
            var tokenCache = new Dictionary <TokenCacheKey, string>();
            var authority  = String.Format("{0}/{1}", AADLoginUrls[(int)env], tenantId);
            var context    = new AuthenticationContext(
                authority: authority,
                validateAuthority: true,
                tokenCacheStore: tokenCache);
            var credential = new ClientCredential(appId, appKey);
            var authResult = context.AcquireToken("https://management.core.windows.net/", credential);

            SaveRecentToken(authResult);

            //TokenCache.SaveCache(env, tokenCache);
            return(authResult);
        }