Using HTTP Authentication

Using HTTP Authentication

gsqlcmd supports the following HTTP authentication methods:

Use the /auth option to specify the method.

For example, use the None method to get the result with an empty authorization header:

gsqlcmd download https://localhost/crm/contacts /auth=None

The default method is Auto.

Use the /interactive option to allow authorizing the request in an interactive mode.

For example:

gsqlcmd download https://localhost/crm/contacts /interactive

You can use the /options, /clientJson, /serviceJson, and /tokenJson options to load options from JSON or plain text files.

For example, a command with the OAuth2 authentication looks like

gsqlcmd download https://localhost/crm/contacts /clientJson=client.json /serviceJson=service.txt /tokenJson=token.json

You can place all options in a single file. For example:

gsqlcmd download https://localhost/crm/contacts /options=options.txt

However, the first method allows separating client and service options and updating the token.json file when the token is refreshed.

Below you will find tips for specific authentication methods.

Basic Authentication

The "Basic" authentication method requires a username and a password.

For example:

gsqlcmd download https://localhost/crm/contacts /auth=basic /username=user /password=pass

You can omit the /auth=basic option as gsqlcmd detects the required "Basic" authentication scheme automatically.

Windows Authentication

You can use the Windows authentication method with the default Windows user credentials or the specified username and password.

For example:

gsqlcmd download https://localhost/crm/contacts /auth=windows

gsqlcmd download https://localhost/crm/contacts /auth=windows /username=user /password=pass

You can specify a domain with a username. For example:

gsqlcmd download https://localhost/crm/contacts /auth=windows /username=domain/user /password=pass

You can omit the /auth=windows option as gsqlcmd detects the Windows authentication scheme automatically.

Forms Authentication

You can use a username and a password if a service supports the Forms script authentication.

For example:

gsqlcmd download https://localhost/crm/contacts /auth=forms /username=user /password=pass

Otherwise, you can use the interactive mode as shown above or specify the authorization cookie.

For example:

gsqlcmd download https://localhost/crm/contacts /auth=forms /cookie=.ASPXFORMSAUTH=D3A...

You can find such cookies in browser developer tools.

The better option is to place the cookie in a file and use the /cookieFile option.

In this case, gsqlcmd updates the refreshed cookie in the file.

For example:

gsqlcmd download https://localhost/crm/contacts /auth=forms /cookieFile=cookie.txt

You can use the /cookieFile option with any Forms authentication mode to save the acquired cookie.

You can omit the /auth=forms option as gsqlcmd detects the Forms authentication scheme in most cases successfully.

When a username and a password are specified, gsqlcmd detects the authorization URL. In some cases, it cannot detect it correctly.

In this case, specify the service root URL in the /authorizationUrl option.

For example:

gsqlcmd download https://localhost/crm/contacts /auth=forms /username=user /password=pass /authorizationUrl=https://localhost/crm/

OAuth2 Authentication

If you have an access token, you can use a simple form like this

gsqlcmd download https://localhost/crm/contacts /auth=oauth2 /tokenType=Bearer /accessToken=token

This form is equivalent to

gsqlcmd download https://localhost/crm/contacts "/header=Authorization: Bearer token"

If you have to acquire the token first and refresh it later, you must configure the OAuth2 method options.

gsqlcmd has enough options to configure any specific requirements.

We recommend split options into three files and use them in any command with the OAuth2 authentication like

gsqlcmd ... /clientJson=client.json /serviceJson=service.json /tokenJson=token.json ...

You can use the following gsqlcmd modes with the OAuth2 authentication:

  • download, convert, or import
  • get-token
  • refresh-token
  • revoke-token

Use the get-token mode first to acquire an access token. Alternatively, use the /interactive option in the download, convert, or import mode.

Use the refresh-token mode to refresh the token explicitly. Usually, this action is not required as gsqlcmd refreshes tokens when needed automatically.

Use the revoke-token mode to revoke the token.

Zoho CRM Configuration Sample

Below is a comprehensive sample of configuration files for Zoho CRM.

Here is a suggested content of the service.txt file:

authorization_url_format={authorization_url}?scope={scope}&client_id={client_id}&response_type=code&access_type=offline&redirect_uri={redirect_uri}
authorization_url=https://accounts.zoho.com/oauth/v2/auth

get_token_url_format={accounts-server}/oauth/v2/token
get_token_body_format=grant_type=authorization_code&client_id={client_id}&client_secret={client_secret}&redirect_uri={redirect_uri}&code={code}

refresh_token_url_format={accounts-server}/oauth/v2/token?refresh_token={refresh_token}&client_id={client_id}&client_secret={client_secret}&grant_type=refresh_token
refresh_token_body_format=

revoke_token_url_format={accounts-server}/oauth/v2/token/revoke?token={refresh_token}
revoke_token_body_format=

The file contains gsqlcmd options like /authorization_url_format, /authorization_url, and so on.

The file contains URL and body formats for every operation like get-token, refresh-token, and revoke-token. Also, it includes options to acquire the initial authorization.

The formats contain variables in curly brackets of other gsqlcmd options specified inline or loaded from files.

You can find these values in the service documentation, like https://www.zoho.com/crm/developer/docs/api/v2/oauth-overview.html for Zoho CRM.

Here is a suggested content of the client.txt file:

client_id=1000...
client_secret=93a...
redirect_uri=https://www...
scope=ZohoCRM.modules.ALL

The formats of the service.txt file use values from this file.

You acquire such values when registering an application.

For example, read this https://www.zoho.com/crm/developer/docs/api/v2/register-client.html for Zoho CRM.

Choose a mobile application type when registering an application at Zoho CRM.

When you configured the client and service options, acquire a token using a command like this

gsqlcmd get-token /clientJson=client.txt /serviceJson=service.txt /tokenJson=token.json

gsqlcmd will open a browser to authorize the application and then acquire the access and refresh tokens.

It will save the token to the token.json file that looks like the following for Zoho CRM:

{
    "location":"us",
    "accounts-server":"https://accounts.zoho.com",
    "valid_to":"2021-03-10T00:36:15.850Z",
    "access_token":"1000.ee9764918066eb3a9ee2b58c00ed4737.28c820e4ef4400000000000000000741",
    "refresh_token":"1000.cedae4432cd94039e2a402bf29bc293b.17906477b8c900000000000000000071",
    "api_domain":"https://www.zohoapis.com",
    "token_type":"Bearer",
    "expires_in":"3600"
}

You can see values suitable for built-in gsqlcmd options like /tokenType and /accessToken discussed above.

Also, you can see the service-specific values like location, accounts-server, and api_domain (that also used in service.txt).

gsqlcmd detects such values automatically and saves them in the token file.

You can define the field list explicitly using the /tokenFields option.

When you acquire the token, you can download data using a command like this

gsqlcmd download https://www.zohoapis.com/crm/v2/Contacts contacts.json /clientJson=client.txt /serviceJson=service.txt /tokenJson=token.json

Or, you can convert data using a command like this

gsqlcmd convert "SELECT Email, First_Name AS FirstName, LastName AS LastName FROM https://www.zohoapis.com/crm/v2/Contacts" contacts.csv ^
    /clientJson=client.txt /serviceJson=service.txt /tokenJson=token.json

Google Search Console Configuration Sample

Below is a simpler sample of configuration files for Google Search Console.

Create an OAuth client ID of the desktop app type at https://console.cloud.google.com/apis/credentials/oauthclient.

Save the client credentials to JSON using the "DOWNLOAD JSON" link and rename it to client.json.

The file content looks like this

{"installed":{
    "client_id":"586418743564-9p0vq6cq8nmjmhgucsm0000000000000.apps.googleusercontent.com",
    "project_id":"searchconsoleapi-000000",
    "auth_uri":"https://accounts.google.com/o/oauth2/auth",
    "token_uri":"https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
    "client_secret":"Aii500000000000000000FCB",
    "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","https://localhost"]
}}

The file contains a complete configuration of the service, including the client application credentials.

gsqlcmd uses the token_uri as a default value for the /getTokenUrl and /requestTokenUrl options.

Also, it uses the standard OAuth2 URL and body formats that are enough for Google.

So, you can get a token using the command:

gsqlcmd get-token /clientJson=client.json /tokenJson=token.json

Then, use any query to download, convert, or import data from the Google Search Console using a command like this

gsqlcmd ... /clientJson=client.json /tokenJson=token.json

See details at https://developers.google.com/webmaster-tools/v1/searchanalytics/query.

OAuth1 Authentication

To authorize the request with the two-ledged OAuth1 scheme, specify the /consumerKey and /consumerSecret options.

For example:

gsqlcmd download https://localhost/crm/contacts /consumerKey=app /consumerSecret=appSecret

The /auth=OAuth1 parameter is optional.

To authorize requests with the three-ledged OAuth1 scheme, you have to acquire the access token first.

You can create a client.txt file with the following contents and fill the values according to the service documentation and your registered application.

consumer_key=
consumer_secret=
callback=
request_token_url=
authorization_url=
access_token_url=

Then, acquire the access token using the command:

gsqlcmd get-token /clientJson=client.txt /tokenJson=token.json

Then, use any query to download, convert, or import data from the service using a command like this

gsqlcmd ... /clientJson=client.json /tokenJson=token.json

Custom Authentication

You can use the custom authentification method to authenticate requests using URL parameters, authorization headers, and cookies.

For example:

gsqlcmd download https://localhost/crm/contacts /urlParameters=api_key=key "/authorizationHeader=Bearer token" /cookieFile=cookie.txt

This method can be easier for several services.

For example, https://data.nasdaq.com/ publishes a lot of data for free. It requires an API key in the URL.