micro-gw.conf Configuration Catalog

The following table explains the runtime configurations that are available in WSO2 API Mircogateway. The configuration file ( micro-gw.conf ) for the Microgateway runtime is located in the <MGW-RUNTIME-HOME>/conf directory. However, you can refer default-micro-gw.conf.template located in <MGW-RUNTIME-HOME>/conf on default configuration values in the Microgateway runtime. If you want to change any default configurations, you have to edit configurations in micro-gw.conf after copying these configurations to micro-gw.conf.

Note

The default-micro-gw.conf.template is a read-only file. The changes you made in default-micro-gw.conf.template will not be considered by the Microgateway. You have to do configurations instead in micro-gw.conf .

Heading Description Sub Heading Description Default value
listenerConfig The transport listener of the Microgateway (MGW) that receives the incoming requests. host Host or IP of the Microgateway that is exposed to the outside. 0.0.0.0
httpPort The port used for HTTP connections 9090
httpsPort The port used for HTTPS connections 9095
keyStore.path Internal Key Store path of the Microgateway ${ballerina.home}/bre/security/ballerinaKeystore.p12
keyStore.password Internal Key Store password ballerina
tokenListenerPort The port where the endpoints (e.g., /token , /authorize etc.) are exposed. 9096
trustStore.path When validating the JWT token, the path of the client trust store where the Microgateway looks for the public certificate of the STS. ${ballerina.home}/bre/security/ballerinaTruststore.p12
trustStore.password The password of the client trust store. ballerina
authConfig The authorization details that the Microgateway uses when enforcing security to the APIs that are exposed by it. authorizationHeader The header Microgateway will look into this header to retrieve security-related details (e.g., If the API is protected by OAuth or JWT it looks for OAuth or JWT token in the specified header. Authorization
removeAuthHeaderFromOutMessage This specifies whether to send the above-mentioned authorization header to the actual back end or not. true
keyManager The Key Manager related information. This information is required when the Microgateway connects with the Key Manager in order to validate the tokens. (for configurations, please check the documentation on Securing APIs Using Opaque Tokens ) serverUrl Connection URL of the Key Manager server. By default, this is WSO2 Identity Server (WSO2 IS). https://localhost:9443
tokenContext The token endpoint context of the Key Manager server. oauth2
timestampSkew The timestamp skew that is added when checking the token validity period for the tokens that are retrieved from the gateway cache. Value is in seconds. 5000
external (Deprecated)To set an external key manager, enable this. false
enableLegacyKM Enable this when Microgateway is configured with older versions of API Manager (3.1.0 or below) to use the key validation service. false
jwksURL The endpoint of the JWT key set url of the key manager server. empty
jwtTokenConfig These details are used by the Microgateway when it validates the JWT present in the request. The Microgateway does the JWT validation itself. It does the signature verification and the validation of the issuer, audience, and validity period as well. issuer The Secure Token Service (STS) that has issued the JWT. If the issuer claim has JWT present in it and the request matches the given value here, then the issuer validation will be successful. https://localhost:9443/oauth2/token
audience The audience claim present in the JWT is matched against the value provided in the configuration. http://org.wso2.apimgt/gateway
certificateAlias The public certificate alias of the STS. wso2apim310
validateSubscription Validate subscribed APIs false
jwtConfig Details related to the JWT that the Microgateway sends to the backend. header The header that the Microgateway uses to include the JWT when forwarding the request to the backend. X-JWT-Assertion
caching The caching config used for OAuth2 token validation. Note that this cache is only for OAuth2 tokens. tokenCache.expiryTime Expiry time of the cache in seconds. 900000
tokenCache.capacity The size of the cache in MB. 100
tokenCache.evictionFactor The factor of the cache that will be cleared when the cache is full. By default 0.25 @5MB of cache will be cleared when the cache is full (i.e. 100 MB). 0.25
analytics Defines the analytics data publishing related configuration streamVersion The analytics stream version to which the events should be published. This should match with the API-M analytics version which is being used. 3.2.0
analytics.fileUpload Configurations for file upload analytics enable This defines whether publishing from the Microgateway to analytics is enabled or not. false
uploadingTimeSpanInMillis The time interval in which the uploading task is run. 600000
uploadingEndpoint The endpoint URL of the web application, to which the file has to be uploaded. This web app is deployed in the Analytics server to retrieve files containing analytics data. https://localhost:9444/analytics/v1.0/usage/upload-file
rotatingPeriod The time interval, after which the file is rotated and compressed. This depends on the Transactions Per Second (TPS) capacity of the environment. 600000
task.uploadFiles This determines whether to enable or disable the file upload task. If this property is disabled, the analytics files are not uploaded to the analytics server, although the files are persisted in the Microgateway system. true
username The username that the analytics server uses. admin
password The password that the analytics server uses. admin
analytics.gRPCAnalytics Analytics configurations for GRPC enable Enable GRPC Analytics false
endpointURL The APIM Analytics endpoint configured to accept gRPC analytics. https://localhost:9806
reconnectTimeInMillies The time interval in milliseconds for gRPC connection recovery task 6000
http2 Http configurations enable Enable HTTP2 true
httpClients HTTP client configuration verifyHostname Hostname verification true
validationConfig Request and response validation configurations enableRequestValidation Enable validating the request false
enableResponseValidation Enable validating the response false
apim.eventHub Configurations for retrieving API and subscription data from API Manager. (This works from API Manager 3.2.0 onwards) enable Enable the data retrieval from API Manager false
serviceUrl The API Manager url https://localhost:9443
internalDataContext The context of the API which is used to retrieve the data during the Microgateway startup /internal/data/v1/
eventListeningEndpoints The message broker endpoint which is used to retrieve the data from subsequent API, Application and Subscription creations. amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5672
security The opaque token validation configuration validateSubscriptions Validate subscriptions when using opaque tokens. (valid only when the event hub configuration is enabled and using API Manager 3.2.0) false

Template configuration file

The following are the default configurations and default template of configurations in Microgateway runtime. You can also find this file in <MGW-RUNTIME-HOME>/conf/default-micro-gw.conf.template.

# Transport listener Configurations
[listenerConfig]
  # Microgateway exposed IP / Host
  host = "0.0.0.0"
  # HTTP port that is used to make APIs available to the outside.
  httpPort = 9090
  # HTTPs port that is used to make APIs available to the outside and for endpoints(/token, /authorize, /revoke/, userinfo) of Key Manager.
  httpsPort = 9095
  # HTTP port for endpoints(/token, /authorize, /revoke/, userinfo) of Key Manager
  tokenListenerPort = 9096
  # Internal keystore
  keyStorePath = "${mgw-runtime.home}/runtime/bre/security/ballerinaKeystore.p12"
  keyStorePassword = "ballerina"
  # Truststore
  trustStorePath = "${mgw-runtime.home}/runtime/bre/security/ballerinaTruststore.p12"
  trustStorePassword = "ballerina"
  # http1 Settings
  # Can be set to either `AUTO`, which respects the `connection` header, or `ALWAYS`,
  # which always keeps the connection alive, or `NEVER`, which always closes the connection
  keepAlive = "AUTO"
  # Defines the maximum number of requests that can be processed at a given time on a single connection.
  # By default 10 requests can be pipelined on a single connection and user can change this limit appropriately.
  maxPipelinedRequests = 10
  # Maximum allowed length for a URI. Exceeding this limit will result in a `414 - URI Too Long` response.
  maxUriLength = 4096
  # Maximum allowed size for headers. Exceeding this limit will result in a `413 - Payload Too Large` response.
  maxHeaderSize = 8192
  # Maximum allowed size for the entity body. By default it is set to -1 which means there is no
  # restriction `maxEntityBodySize`, On the Exceeding this limit will result in a`413 - Payload Too Large` response.
  maxEntityBodySize = -1


# API Authorization security for the gateway and the backend
[authConfig]
  # Authorization header expected by the Microgateway. Can be overridden at API level using the extension
  authorizationHeader = "Authorization"
  # Remove authorization header from the backend request
  removeAuthHeaderFromOutMessage = true

# API JWT Authorization security for backend
[jwtConfig]
  # JWT header when forwarding the request to the backend
  header = "X-JWT-Assertion"

# Key manager configurations
[keyManager]
  # Connection URL of the Key Manager server
  serverUrl = "https://localhost:9443"
  # The token endpoint context of the Key Manager server
  tokenContext = "oauth2"
  # When Microgateway is used with older APIM versions for subscription validation by using KeyValidation service.
  enableLegacyMode = false
  # Remote User Claim Retrieval Enabled
  remoteUserClaimRetrievalEnabled = false
  # Basic security configurations
  # Issuer
  issuer = "https://localhost:9443/oauth2/token"
  [keymanager.security.basic]
    enabled = true
    username = "admin"
    password = "admin"
  # Oauth2 security configurations
  [keymanager.security.oauth2]
    enabled = false
    # Authentication credentials should be sent via (AUTH_HEADER_BEARER/POST_BODY_BEARER/NO_BEARER)?
    credentialBearer = "AUTH_HEADER_BEARER"
    # Token URL for the authorization endpoint
    tokenUrl = ""
    # Oauth2 security grants
    [keymanager.security.oauth2.clientCredential]
      enabled = false
      clientId = ""
      clientSecret = ""
      scopes = ""
    [keymanager.security.oauth2.password]
      enabled = false
      clientId = ""
      clientSecret = ""
      scopes = ""
      username = ""
      password = ""
    [keymanager.security.oauth2.directToken]
      enabled = false
      accessToken = ""
    [keymanager.security.oauth2.refresh]
      enabled = false
      refreshUrl = ""
      scopes = ""
      refreshToken = ""
      clientId = ""
      clientSecret = ""

# JWT token authorization configurations. You can provide multiple JWT issuers
# Issuer 1
[[jwtTokenConfig]]
  issuer = "https://localhost:9443/oauth2/token"
  certificateAlias = "wso2apim310"
  URL of the JWKs endpoint
  jwksURL = ""
  # Validate subscribed APIs
  validateSubscription = false
  # The claim in which the consumer key of the application is coming
  consumerKeyClaim = "aud"
  #class name of JWT claims value mapper transformer if you need claims mapping.
  claimMapperClassName = "org.wso2.micro.gateway.jwtTransformer.DefaultJwtTransformer"
  # Remote User Claim Retrieval Enabled
  remoteUserClaimRetrievalEnabled = false
  # The key of remote claims and the local claims if you need claims mapping.
  [[jwtTokenConfig.claims]]
    remoteClaim = "scp"
    localClaim = "scope"
  [[jwtTokenConfig.claims]]
    remoteClaim = "FName"
    localClaim = "firstName"
# Issuer 2
[[jwtTokenConfig]]
  issuer = "https://host:port/issuer"
  audience = "http://org.wso2.apimgt/gateway"
  certificateAlias = "alias"
  # Validate subscribed APIs
  validateSubscription = false
  #class name of JWT claims value mapper transformer if you need claims mapping.
  claimMapperClassName = "org.wso2.micro.gateway.jwtTransformer.customJwtTransformer"
  # Remote User Claim Retrieval Enabled
  remoteUserClaimRetrievalEnabled = false
  # The key of remote claims and the local claims if you need claims mapping.
  [[jwtTokenConfig.claims]]
    remoteClaim = "scps"
    localClaim = "scope"
  [[jwtTokenConfig.claims]]
    remoteClaim = "FN"
    localClaim = "firstName"

# JWT token revocation configurations
[tokenRevocationConfig]
# Real time revocation configurations
  [tokenRevocationConfig.realtime]
    enableRealtimeMessageRetrieval = false
    # The JMS Message Broker that identify messages related to revoked tokens
    jmsConnectionTopic = "tokenRevocation"
    # The message broker context factory
    jmsConnectioninitialContextFactory = "wso2mbInitialContextFactory"
    # The message broker connection URL
    jmsConnectionProviderUrl= "amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5672'"
    # The username used to establish  the message broker connection
    jmsConnectionUsername = ""
    # The password used to establish  the message broker connection
    jmsConnectionPassword = ""
  # Persistent revocation configurations
  [tokenRevocationConfig.persistent]
    enablePersistentStorageRetrieval = false
    # Use APIM as the default persistent storage. Other types are "etcd" and "custom"
    type = "default"
    # The endpoint url of your persistent storage server (e.g.: <etcd-server-access-URL>/<service>/keys/jti/)
    endpointURL = "https://localhost:9443/internal/data/v1"
    # The username of your persistent storage server
    username = "admin"
    # The password of your persistent storage server
    password = "admin"

# token cache configurations
[caching]
  # Expiry time of the cache in seconds
  tokenCacheExpiryTime = 900000
  # The size of the cache in MB
  tokenCacheCapacity = 10000
  # The factor of the cache that will be cleared when the cache is full.
  tokenCacheEvictionFactor = 0.25

# Analytics configurations
[analytics]
  # The configured API Manager analytics stream version
  streamVersion = "3.2.0"
  # Configurations for file upload analytics
  [analytics.fileUpload]
    enable = false
    # Time interval in milliseconds for file uploading task 
    uploadingTimeSpanInMillis = 600000
    # Initial time delay in milliseconds for file upload analytics
    initialDelayInMillis = 5000
    # Endpoint configured to accept file upload analytics
    uploadingEndpoint = "https://localhost:9444/analytics/v1.0/usage/upload-file"
    # File rotating period in milliseconds
    rotatingPeriod = 600000
    # To enable file upload task
    taskUploadFiles = true
    # Username used in analytics server
    username = "admin"
    # Password used in in analytics server
    password = "admin"
  [analytics.gRPCAnalytics]
    enable = false
    # APIM Analytics endpoint configured to accept gRPC analytics
    endpointURL = "https://localhost:9806"
    # Time interval in milliseconds for gRPC connection recovery task
    reconnectTimeInMillies = 6000

# User configuration for Basic auth
[b7a.users]
  # [b7a.users.<username>]
  #   password = <sha1 encrypted password> / <prefix>:<encrypted password>
  #   scopes = <comma_separated_scopes> if scopes are needed
  # Example 1:
  [b7a.users.admin]
    # password should be sha1 encrypted by default
    password = "d033e22ae348aeb5660fc2140aec35850c4da997"
  # Example 2:
  [b7a.users.prometheus]
    # Password. @prefix used to denote that password is hashed with the algorithm (e.g.: @sha256, @sha512)
    password = "@sha256:{5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8}"
    # scopes (e.g. "observability" to enable observability)
    scopes = "observability"

# Request and response validation configurations
[validationConfig]
  enableRequestValidation = false
  enableResponseValidation = false

# Enable http2 for the microgateway listeners.
[http2]
  enable = true

# HTTP client configuration. These are used when gateway connects with the upstream backend endpoints
[httpClients]
  # Hostname verification
  verifyHostname=true
  # Skip validating certificates when ssl is used
  disableSslVerification = false
  # Enable http2 when connecting with upstream backend endpoints.
  enableHttp2 = true
  #Proxy configurations required when microgateway connects to an upstream back end via a corporate proxy.
  [httpClients.proxy]
    #Enable proxy when connecting with backend services.
    enable = false
    #Enable proxy when microgateway communicating with internal components like key manager, analytics and etc
    enableInternalServices = false
    # Host or IP address of the proxy server
    host = ""
    # Port on which proxy server is listening
    port = 0
    # Security credentials if the proxy server is protected.
    username = ""
    password = ""
  # Configurations for managing HTTP client(sender) connection pool
  [httpClients.poolConfig]
    #Max active connections per route(host:port). Default value is -1 which indicates unlimited
    maxActiveConnections = -1
    #Maximum number of idle connections allowed for the pool
    maxIdleConnections = 100
    #Maximum amount of time, the client should wait for an idle connection before it sends an error when the pool is exhausted
    waitTimeInMillis = 30000
    #Maximum active streams per connection. This only applies to HTTP/2.
    maxActiveStreamsPerConnection = 50
  [httpClients.sslConfig]
    # SSL Protocol to be used
    protocolName = "TLS"
    # List of ciphers to be used
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256  ,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256  ,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
    # SSL/TLS protocols to be enabled
    protocolVersions = "TLSv1.2,TLSv1.1"
    # Internal keystore
    keyStorePath = "${mgw-runtime.home}/runtime/bre/security/ballerinaKeystore.p12"
    keyStorePassword = "ballerina"
    # Truststore
    trustStorePath = "${mgw-runtime.home}/runtime/bre/security/ballerinaTruststore.p12"
    trustStorePassword = "ballerina"

# Mutual SSL configuration
[mutualSSLConfig]
  # SSL Protocol to be used
  protocolName = "TLS"
  # SSL/TLS protocols to be enabled
  protocolVersions = "TLSv1.2,TLSv1.1"
  # List of ciphers to be used
  ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256  ,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256  ,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
  # The type of client certificate verification. (e.g.: "require" or "optional")
  sslVerifyClient = "optional"
  # Header name append by the load balancer including the encoded certificate of client after mtls handshake with client.
  certificateHeaderName = "X-WSO2-CLIENT-CERTIFICATE"
  # Is client certificate validation enable. This applies only if the certificate is present in the header. That is
  # in load balancer fronted scenarios. If there is no load balancer in front of gateway, then if mutual ssl is enabled
  # for the API, then irrespective of this config value, certificate will be validated.
  isClientCertificateValidationEnabled = true
    # [[mutualSSLConfig.api.certificates]]
      # name = "API name given in the API Definition"
      # version = "API version given in the API definition"
      # aliasList = "list of aliases for a given API"
    # Examples :
    # API 1
    [[mutualSSLConfig.api.certificates]]
      name = "Swagger Petstore"
      version = "1.0.5"
      aliasList = ["ballerina", "wso2apim310"]
    # API 2
    [[mutualSSLConfig.api.certificates]]
      name = "MyAPI"
      version = "2.0.0"
      aliasList = ["myAlias1", "myAlias2"]


# Throttling configurations
[throttlingConfig]
  # Connect with the central traffic manager
  enabledGlobalTMEventPublishing = false
  # Enable global advanced throttling based on request header conditions
  enableHeaderConditions = false
  # Enable global advanced throttling based on request query parameter conditions
  enableQueryParamConditions = false
  # Enable global advanced throttling based on jwt claim conditions
  enableJwtClaimConditions = false
  # The message broker context factory
  jmsConnectioninitialContextFactory = "wso2mbInitialContextFactory"
  # The message broker connection URL
  jmsConnectionProviderUrl = "amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5672'"
  # The username used to establish  the message broker connection
  jmsConnectionUsername = ""
  # The password used to establish  the message broker connection
  jmsConnectionPassword = ""
  # The central traffic management solution URL
  throttleEndpointUrl = "https://localhost:9443/endpoints"
  # username:password to create the connection to the central traffic manager
  throttleEndpointbase64Header = "admin:admin"
  #Configurations related to retrieve custom throttle policy related key templates from traffic manager or key manager.
  [throttlingConfig.dataRetriever]
    serverUrl = "https://localhost:9443/internal/data/v1"
    username = "admin"
    password = "admin"
  # Configurations related to node local throttling.
  [throttlingConfig.nodeLocal]
    # Core number of threads in the thread pool.
    processThreadPoolCoreSize = 200
    # Maximum number of threads in the thread pool.
    processThreadPoolMaximumSize = 1000
    # Keep alive time of the threads in seconds
    processThreadPoolKeepAliveTime = 200
    # Throttle data cleanup task frequency in seconds.
    cleanUpFrequency = 3600


  # Throttling configurations related to event publishing using a binary connection
  [throttlingConfig.binary]
    enabled = true
    # Credentials required to establish connection between Traffic Manager
    username = "admin"
    password = "admin"
    # Receiver URL and the authentication URL of the Traffic manager node/nodes
    [[throttlingConfig.binary.URLGroup]]
      receiverURL = "tcp://localhost:9611"
      authURL = "ssl://localhost:9711"
    # Data publisher object pool configurations
    [throttlingConfig.binary.publisherPool]
      maxIdle = 1000
      initIdleCapacity = 200
    # Data publisher thread pool configurations
    [throttlingConfig.binary.publisherThreadPool]
      corePoolSize = 200
      maxPoolSize = 1000
      keepAliveTime = 200
    [throttlingConfig.binary.agent]
      # SSL Protocols
      sslEnabledProtocols = "TLSv1,TLSv1.1,TLSv1.2"
      # ciphers
      ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256  ,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256  ,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
      # The size of the queue event disruptor which handles events before they are published.
      # The value specified should always be the result of an exponent with 2 as the base.
      queueSize = 32768
      # The maximum number of events in a batch sent to the queue event disruptor at a given time
      batchSize = 200
      # The number of threads that will be reserved to handle events at the time you start
      corePoolSize = 1
      # Socket timeout
      socketTimeoutMS = 30000
      # The maximum number of threads that should be reserved at any given time to handle events
      maxPoolSize = 1
      # The amount of time which threads in excess of the core pool size may remain idle before being terminated.
      keepAliveTimeInPool = 20
      # The time interval between reconnection
      reconnectionInterval = 30
      # TCP connection pool configurations (for data publishing)
      maxTransportPoolSize = 250
      maxIdleConnections = 250
      evictionTimePeriod = 5500
      minIdleTimeInPool = 5000
      # SSL connection pool configurations (for authentication)
      secureMaxIdleTransportPoolSize = 250
      secureMaxIdleConnections = 250
      secureEvictionTimePeriod = 5500
      secureMinIdleTimeInPool = 5000

# Observability configurations
[b7a.observability]
  # Observability metrics monitoring
  [b7a.observability.metrics]
    enabled = false
    # Reporter name that reports the collected Metrics to the remote metrics server
    reporter = "prometheus"
    # Prometheus to scrape the information
    [b7a.observability.metrics.prometheus]
      # port exposing api level metrics
      port=9797
      # port exposing vm level metrics
      jmx_port = 8080
      # secure port for api level and vm level metrics
      secure_port = 9000
  # Observability distributed tracing
  [b7a.observability.tracing]
    enabled = false
    # Tracer name
    name = "jaeger"
    # Jaeger for tracing
    [b7a.observability.tracing.jaeger.reporter]
      # The port which the Jaeger server is listening to
      port = 5775

# API Key authentication configurations
[apikey.tokenConfigs]
  issuer="https://localhost:9095/apikey"
  certificateAlias="ballerina"
  # Validate Allowed/subscribed APIs
  validateAllowedAPIs=false

# API Key Security Token Service(STS) configurations
[apikey.issuer]
  # API Key STS token configurations
  [apikey.issuer.tokenConfig]
    enabled=true
    keyStorePath="${mgw-runtime.home}/runtime/bre/security/ballerinaKeystore.p12"
    keyStorePassword="ballerina"
    issuer="https://localhost:9095/apikey"
    certificateAlias="ballerina"
    # validity time in seconds for the API Key. -1 is to indicate unlimited time 
    validityTime=-1
  # API Key STS Allowed APIs
    # provide the list of allowed APIs by the generated API Key
    # [[apikey.issuer.api]] 
      # name="API name given in the API Definition"
      # versions="Allowed versions" or "*" to allow all versions
    # Examples :
    # API 1
    [[apikey.issuer.api]]
      name="Swagger Petstore New"
      versions="1.0.0, v1, v2"
    # API 2
    [[apikey.issuer.api]]
      name="MyAPI"
      versions="*"

# JWT Generator configurations
[jwtGeneratorConfig]
  # Enable jwt generator
  jwtGeneratorEnabled=false
  # Dialect prefix that can be added to the claims
  claimDialect="http://wso2.org/claims"
  # Signature algorithm used to sign the JWT token (only SHA256withRSA and NONE is supported)
  signingAlgorithm="SHA256withRSA"
  # Certificate alias from the keystore
  certificateAlias="ballerina"
  # Private key alias from the keystore
  privateKeyAlias="ballerina"
  # JWT token expiry time - ms (valid only if the jwt generator caching mechanism is disabled)
  tokenExpiry=900000
  # Restricted claims as an array that should not be included in the backend JWT token
  # Example: restrictedClaims=["claim1","claim2","claim3"]
  restrictedClaims=[]
  # Token issuer standard claim
  issuer="wso2.org/products/am"
  # Token audience standard claim
  audience=["http://org.wso2.apimgt/gateway"]
  # JWT token generator implementation
  generatorImpl="org.wso2.micro.gateway.jwt.generator.MGWJWTGeneratorImpl"
  [jwtGeneratorConfig.claimRetrieval]
      # User claim retriever implementation. This configuration is not applied by default.
      # User needs to mention the class explicitly
      retrieverImpl=""
      [jwtGeneratorConfig.claimRetrieval.configuration]
          custom_config_key = "custom_config_property"
  # JWT Generator cache configurations
  [jwtGeneratorConfig.jwtGeneratorCaching]
    # Enable jwt generator token caching
    tokenCacheEnable=true
    # Token cache expiry time (ms)
    tokenCacheExpiryTime=900000
    # Token cache capacity
    tokenCacheCapacity=10000
    # Token cache eviction factor
    tokenCacheEvictionFactor=0.25

# server configuration
[server]
  # timestamp skew in milliseconds which added when checking the token validity period
  timestampSkew = 5000

# Configurations for retrieving API and subscription data from API Manager.
[apim.eventHub]
  # Enable/ Disable the feature
  enable = false
  # The API Manager URL
  serviceUrl = "https://localhost:9443"
  # The internal data REST API context.
  internalDataContext="/internal/data/v1/"
  # User name and password of the internal data api.
  username="admin"
  password="admin"
  # The message broker connection URL.
  eventListeningEndpoints = "amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5672'"

# API Manager default credentials
[apim.credentials]
username = "admin"
password = "admin"

# Token validation configuration
[security]
  # Enable/ Disable subscription validation for opaque (reference) tokens.
  validateSubscriptions = false
Top