Repository: dbt-labs/dbt-snowflake (python)

Issue:
MFA Token not being cached
### Describe the bug
I'm trying to get Snowflake's [DUO-based MFA](https://docs.snowflake.com/en/user-guide/security-mfa.html#connecting-to-snowflake-with-mfa) working when running dbt in a linux container running on my laptop.  Technically it works, but it's not caching the token and I have to repeatedly re-authorize.  I have tried:

* Setting ALLOW_CLIENT_MFA_CACHING to true for the account
* Setting ALLOW_ID_TOKEN to true for the account
* Setting `authenticator: username_password_mfa` in profiles.yml

All that, and yet, every time I run dbt, I get 4 MFA auth requests right away, and then 1 for each model that it runs.  Obviously, this is impractical with 10-100's of models.  I'm wondering what else I might be missing, if anything.  I swear there used to be a note in Snowflake's docs that some aspect of this only worked on Mac and Windows environments, but I can't find that anymore and was hopeful that it had been resolved for linux.  Perhaps this is a dbt defect that isn't sending the right auth method to the python lib?


### System information
**The output of `dbt --version`:**
```
root@bbafbba2e1dc:/dbt-runner/dbt# dbt --version
installed version: 0.21.0
   latest version: 0.21.1

Your version of dbt is out of date! You can find instructions for upgrading here:
https://docs.getdbt.com/docs/installation

Plugins:
  - snowflake: 0.21.0
```

**The operating system you're using:**  Using a linux container built based on [this dockerfile](https://github.com/gnilrets/dbt-container-skeleton/blob/main/Dockerfile) (with some minor modifications)
```
root@bbafbba2e1dc:/dbt-runner/dbt# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"


root@bbafbba2e1dc:/dbt-runner/dbt# uname -r
5.10.47-linuxkit
```

**The output of `python --version`:**
```
root@bbafbba2e1dc:/dbt-runner/dbt# python --version
Python 3.8.12
```
**Version of snowflake connector:** `snowflake-connector-python[secure-local-storage]==2.5.1`


Pull request:
enable mfa token cache for linux
enables mfa token caching for linux when using the `username_password_mfa` authenticator

resolves #64

<!---
  Include the number of the issue addressed by this PR above if applicable.
  PRs for code changes without an associated issue *will not be merged*.
  See CONTRIBUTING.md for more information.

  Example:
    resolves #1234
-->

### Description

<!--- Describe the Pull Request here -->

### Checklist

- [x] I have signed the [CLA](https://docs.getdbt.com/docs/contributor-license-agreements)
- [x] I have run this code in development and it appears to resolve the stated issue
- [x] This PR includes tests, or tests are not required/relevant for this PR
- [ ] I have updated the `CHANGELOG.md` and added information about my change to the "dbt-snowflake next" section.

Patch:
diff --git a/dbt/adapters/snowflake/connections.py b/dbt/adapters/snowflake/connections.py
index 869f5f9..be10ebc 100644
--- a/dbt/adapters/snowflake/connections.py
+++ b/dbt/adapters/snowflake/connections.py
@@ -115,8 +115,10 @@ class SnowflakeCredentials(Credentials):
                     )
 
                 result['token'] = token
-            # enable the token cache
+            # enable id token cache for linux
             result['client_store_temporary_credential'] = True
+            # enable mfa token cache for linux
+            result['client_request_mfa_token'] = True
         result['private_key'] = self._get_private_key()
         return result
 


Test patch:
diff --git a/tests/unit/test_snowflake_adapter.py b/tests/unit/test_snowflake_adapter.py
index f0791c3..5752ec1 100644
--- a/tests/unit/test_snowflake_adapter.py
+++ b/tests/unit/test_snowflake_adapter.py
@@ -315,7 +315,8 @@ class TestSnowflakeAdapter(unittest.TestCase):
                 password='test_password', role=None, schema='public',
                 user='test_user', warehouse='test_warehouse',
                 authenticator='test_sso_url', private_key=None,
-                application='dbt', client_store_temporary_credential=True, insecure_mode=False)
+                application='dbt', client_request_mfa_token=True, 
+                client_store_temporary_credential=True, insecure_mode=False)
         ])
 
     def test_authenticator_externalbrowser_authentication(self):
@@ -333,7 +334,8 @@ class TestSnowflakeAdapter(unittest.TestCase):
                 client_session_keep_alive=False, database='test_database',
                 role=None, schema='public', user='test_user',
                 warehouse='test_warehouse', authenticator='externalbrowser',
-                private_key=None, application='dbt', client_store_temporary_credential=True, insecure_mode=False)
+                private_key=None, application='dbt', client_request_mfa_token=True, 
+                client_store_temporary_credential=True, insecure_mode=False)
         ])
 
     def test_authenticator_oauth_authentication(self):
@@ -352,7 +354,8 @@ class TestSnowflakeAdapter(unittest.TestCase):
                 client_session_keep_alive=False, database='test_database',
                 role=None, schema='public', user='test_user',
                 warehouse='test_warehouse', authenticator='oauth', token='my-oauth-token',
-                private_key=None, application='dbt', client_store_temporary_credential=True, insecure_mode=False)
+                private_key=None, application='dbt', client_request_mfa_token=True, 
+                client_store_temporary_credential=True, insecure_mode=False)
         ])
 
     @mock.patch('dbt.adapters.snowflake.SnowflakeCredentials._get_private_key', return_value='test_key')