示例#1
0
        public Template CreateAuthorizationServerTemplate(CreatorConfig creatorConfig)
        {
            // create empty template
            Template authorizationTemplate = CreateEmptyTemplate();

            // add parameters
            authorizationTemplate.parameters = new Dictionary <string, TemplateParameterProperties>
            {
                { ParameterNames.ApimServiceName, new TemplateParameterProperties()
                  {
                      type = "string"
                  } }
            };

            List <TemplateResource> resources = new List <TemplateResource>();

            foreach (AuthorizationServerTemplateProperties authorizationServerTemplateProperties in creatorConfig.authorizationServers)
            {
                // create authorization server resource with properties
                AuthorizationServerTemplateResource authorizationServerTemplateResource = new AuthorizationServerTemplateResource()
                {
                    name       = $"[concat(parameters('{ParameterNames.ApimServiceName}'), '/{authorizationServerTemplateProperties.displayName}')]",
                    type       = ResourceTypeConstants.AuthorizationServer,
                    apiVersion = GlobalConstants.APIVersion,
                    properties = authorizationServerTemplateProperties,
                    dependsOn  = new string[] { }
                };
                resources.Add(authorizationServerTemplateResource);
            }

            authorizationTemplate.resources = resources.ToArray();
            return(authorizationTemplate);
        }
        public void ShouldCreateAuthorizationServerTemplateFromCreatorConfig()
        {
            // arrange
            AuthorizationServerTemplateCreator authorizationServerTemplateCreator = new AuthorizationServerTemplateCreator(new TemplateBuilder());
            CreatorConfig creatorConfig = new CreatorConfig()
            {
                authorizationServers = new List <AuthorizationServerProperties>()
            };
            AuthorizationServerProperties authorizationServer = new AuthorizationServerProperties()
            {
                Description           = "description",
                DisplayName           = "displayName",
                AuthorizationEndpoint = "endpoint.com",
                AuthorizationMethods  = new string[] { "GET" },
                TokenBodyParameters   = new AuthorizationServerTokenBodyParameter[] { new AuthorizationServerTokenBodyParameter()
                                                                                      {
                                                                                          Name  = "name",
                                                                                          Value = "value"
                                                                                      } },
                ClientAuthenticationMethod = new string[] { "GET" },
                TokenEndpoint             = "endpoint.com",
                SupportState              = true,
                DefaultScope              = "defaultScope",
                BearerTokenSendingMethods = new string[] { "GET" },
                ClientId     = "id",
                ClientSecret = "secret",
                ClientRegistrationEndpoint = "endpoint.com",
                ResourceOwnerPassword      = "******",
                ResourceOwnerUsername      = "******",
                GrantTypes = new string[] { }
            };

            creatorConfig.authorizationServers.Add(authorizationServer);

            // act
            Template authorizationServerTemplate = authorizationServerTemplateCreator.CreateAuthorizationServerTemplate(creatorConfig);
            AuthorizationServerTemplateResource authorizationServerTemplateResource = (AuthorizationServerTemplateResource)authorizationServerTemplate.Resources[0];

            // assert
            Assert.Equal($"[concat(parameters('{ParameterNames.ApimServiceName}'), '/{authorizationServer.DisplayName}')]", authorizationServerTemplateResource.Name);
            Assert.Equal(authorizationServer.Description, authorizationServerTemplateResource.Properties.Description);
            Assert.Equal(authorizationServer.DisplayName, authorizationServerTemplateResource.Properties.DisplayName);
            Assert.Equal(authorizationServer.AuthorizationEndpoint, authorizationServerTemplateResource.Properties.AuthorizationEndpoint);
            Assert.Equal(authorizationServer.AuthorizationMethods, authorizationServerTemplateResource.Properties.AuthorizationMethods);
            Assert.Equal(authorizationServer.ClientAuthenticationMethod, authorizationServerTemplateResource.Properties.ClientAuthenticationMethod);
            Assert.Equal(authorizationServer.ClientId, authorizationServerTemplateResource.Properties.ClientId);
            Assert.Equal(authorizationServer.ClientRegistrationEndpoint, authorizationServerTemplateResource.Properties.ClientRegistrationEndpoint);
            Assert.Equal(authorizationServer.ClientSecret, authorizationServerTemplateResource.Properties.ClientSecret);
            Assert.Equal(authorizationServer.BearerTokenSendingMethods, authorizationServerTemplateResource.Properties.BearerTokenSendingMethods);
            Assert.Equal(authorizationServer.GrantTypes, authorizationServerTemplateResource.Properties.GrantTypes);
            Assert.Equal(authorizationServer.ResourceOwnerPassword, authorizationServerTemplateResource.Properties.ResourceOwnerPassword);
            Assert.Equal(authorizationServer.ResourceOwnerUsername, authorizationServerTemplateResource.Properties.ResourceOwnerUsername);
            Assert.Equal(authorizationServer.DefaultScope, authorizationServerTemplateResource.Properties.DefaultScope);
            Assert.Equal(authorizationServer.SupportState, authorizationServerTemplateResource.Properties.SupportState);
            Assert.Equal(authorizationServer.TokenBodyParameters[0].Name, authorizationServerTemplateResource.Properties.TokenBodyParameters[0].Name);
            Assert.Equal(authorizationServer.TokenBodyParameters[0].Value, authorizationServerTemplateResource.Properties.TokenBodyParameters[0].Value);
        }
        public void ShouldCreateAuthorizationServerTemplateFromCreatorConfig()
        {
            // arrange
            AuthorizationServerTemplateCreator authorizationServerTemplateCreator = new AuthorizationServerTemplateCreator();
            CreatorConfig creatorConfig = new CreatorConfig()
            {
                authorizationServers = new List <AuthorizationServerTemplateProperties>()
            };
            AuthorizationServerTemplateProperties authorizationServer = new AuthorizationServerTemplateProperties()
            {
                description           = "description",
                displayName           = "displayName",
                authorizationEndpoint = "endpoint.com",
                authorizationMethods  = new string[] { "GET" },
                tokenBodyParameters   = new AuthorizationServerTokenBodyParameter[] { new AuthorizationServerTokenBodyParameter()
                                                                                      {
                                                                                          name  = "name",
                                                                                          value = "value"
                                                                                      } },
                clientAuthenticationMethod = new string[] { "GET" },
                tokenEndpoint             = "endpoint.com",
                supportState              = true,
                defaultScope              = "defaultScope",
                bearerTokenSendingMethods = new string[] { "GET" },
                clientId     = "id",
                clientSecret = "secret",
                clientRegistrationEndpoint = "endpoint.com",
                resourceOwnerPassword      = "******",
                resourceOwnerUsername      = "******",
                grantTypes = new string[] { }
            };

            creatorConfig.authorizationServers.Add(authorizationServer);

            // act
            Template authorizationServerTemplate = authorizationServerTemplateCreator.CreateAuthorizationServerTemplate(creatorConfig);
            AuthorizationServerTemplateResource authorizationServerTemplateResource = (AuthorizationServerTemplateResource)authorizationServerTemplate.resources[0];

            // assert
            Assert.Equal($"[concat(parameters('apimServiceName'), '/{authorizationServer.displayName}')]", authorizationServerTemplateResource.name);
            Assert.Equal(authorizationServer.description, authorizationServerTemplateResource.properties.description);
            Assert.Equal(authorizationServer.displayName, authorizationServerTemplateResource.properties.displayName);
            Assert.Equal(authorizationServer.authorizationEndpoint, authorizationServerTemplateResource.properties.authorizationEndpoint);
            Assert.Equal(authorizationServer.authorizationMethods, authorizationServerTemplateResource.properties.authorizationMethods);
            Assert.Equal(authorizationServer.clientAuthenticationMethod, authorizationServerTemplateResource.properties.clientAuthenticationMethod);
            Assert.Equal(authorizationServer.clientId, authorizationServerTemplateResource.properties.clientId);
            Assert.Equal(authorizationServer.clientRegistrationEndpoint, authorizationServerTemplateResource.properties.clientRegistrationEndpoint);
            Assert.Equal(authorizationServer.clientSecret, authorizationServerTemplateResource.properties.clientSecret);
            Assert.Equal(authorizationServer.bearerTokenSendingMethods, authorizationServerTemplateResource.properties.bearerTokenSendingMethods);
            Assert.Equal(authorizationServer.grantTypes, authorizationServerTemplateResource.properties.grantTypes);
            Assert.Equal(authorizationServer.resourceOwnerPassword, authorizationServerTemplateResource.properties.resourceOwnerPassword);
            Assert.Equal(authorizationServer.resourceOwnerUsername, authorizationServerTemplateResource.properties.resourceOwnerUsername);
            Assert.Equal(authorizationServer.defaultScope, authorizationServerTemplateResource.properties.defaultScope);
            Assert.Equal(authorizationServer.supportState, authorizationServerTemplateResource.properties.supportState);
            Assert.Equal(authorizationServer.tokenBodyParameters[0].name, authorizationServerTemplateResource.properties.tokenBodyParameters[0].name);
            Assert.Equal(authorizationServer.tokenBodyParameters[0].value, authorizationServerTemplateResource.properties.tokenBodyParameters[0].value);
        }
        public async Task <Template> GenerateAuthorizationServersARMTemplate(string apimname, string resourceGroup, string singleApiName, List <TemplateResource> apiTemplateResources)
        {
            Console.WriteLine("------------------------------------------");
            Console.WriteLine("Extracting authorization servers from service");
            Template armTemplate = GenerateEmptyTemplateWithParameters();

            List <TemplateResource> templateResources = new List <TemplateResource>();

            // isolate api resources in the case of a single api extraction, as they may reference authorization servers
            var apiResources = apiTemplateResources.Where(resource => resource.type == ResourceTypeConstants.API);

            // pull all authorization servers for service
            string authorizationServers = await GetAuthorizationServers(apimname, resourceGroup);

            JObject oAuthorizationServers = JObject.Parse(authorizationServers);

            foreach (var item in oAuthorizationServers["value"])
            {
                string authorizationServerName = ((JValue)item["name"]).Value.ToString();
                string authorizationServer     = await GetAuthorizationServer(apimname, resourceGroup, authorizationServerName);

                // convert returned authorization server to template resource class
                AuthorizationServerTemplateResource authorizationServerTemplateResource = JsonConvert.DeserializeObject <AuthorizationServerTemplateResource>(authorizationServer);
                authorizationServerTemplateResource.name       = $"[concat(parameters('ApimServiceName'), '/{authorizationServerName}')]";
                authorizationServerTemplateResource.apiVersion = GlobalConstants.APIVersion;

                // only extract the authorization server if this is a full extraction, or in the case of a single api, if it is referenced by one of the api's authentication settings
                bool isReferencedByAPI = false;
                foreach (APITemplateResource apiResource in apiResources)
                {
                    if (apiResource.properties.authenticationSettings != null &&
                        apiResource.properties.authenticationSettings.oAuth2 != null &&
                        apiResource.properties.authenticationSettings.oAuth2.authorizationServerId != null &&
                        apiResource.properties.authenticationSettings.oAuth2.authorizationServerId.Contains(authorizationServerName))
                    {
                        isReferencedByAPI = true;
                    }
                }
                if (singleApiName == null || isReferencedByAPI)
                {
                    Console.WriteLine("'{0}' Authorization server found", authorizationServerName);
                    templateResources.Add(authorizationServerTemplateResource);
                }
            }

            armTemplate.resources = templateResources.ToArray();
            return(armTemplate);
        }
        public async Task <Template> Create(DeploymentDefinition creatorConfig)
        {
            var authorizationTemplate = EmptyTemplate;

            authorizationTemplate.Parameters.Add(ApiServiceNameParameter.Key, ApiServiceNameParameter.Value);

            var resources = new List <TemplateResource>();

            foreach (var authorizationServerTemplateProperties in creatorConfig.AuthorizationServers)
            {
                // create authorization server resource with properties
                var authorizationServerTemplateResource = new AuthorizationServerTemplateResource()
                {
                    Name       = $"[concat(parameters('ApimServiceName'), '/{authorizationServerTemplateProperties.displayName}')]",
                    Properties = authorizationServerTemplateProperties,
                    DependsOn  = new string[] { }
                };
                resources.Add(authorizationServerTemplateResource);
            }

            authorizationTemplate.Resources = resources.ToArray();

            return(await Task.FromResult(authorizationTemplate));
        }