Skip to content

Commit 9b586d4

Browse files
authored
SNOW-862388: fix okta retry bug (#1674)
1 parent db8e265 commit 9b586d4

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

DESCRIPTION.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Source code is also available at: https://github.com/snowflakedb/snowflake-conne
1010

1111
- v3.1.1(TBD)
1212

13+
- Fixed a bug in retry logic for okta authentication to refresh token.
1314
- Support `RSAPublicKey` when constructing `AuthByKeyPair` in addition to raw bytes.
1415

1516
- v3.1.0(July 31,2023)

src/snowflake/connector/auth/okta.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,13 +277,14 @@ def _step4(
277277
logger.debug("step 4: query IDP URL snowflake app to get SAML " "response")
278278
timeout_time = time.time() + conn.login_timeout if conn.login_timeout else None
279279
response_html = {}
280+
origin_sso_url = sso_url
280281
while timeout_time is None or time.time() < timeout_time:
281282
try:
282283
url_parameters = {
283284
"RelayState": "/some/deep/link",
284285
"onetimetoken": generate_one_time_token(),
285286
}
286-
sso_url = sso_url + "?" + urlencode(url_parameters)
287+
sso_url = origin_sso_url + "?" + urlencode(url_parameters)
287288
headers = {
288289
HTTP_HEADER_ACCEPT: "*/*",
289290
}

test/unit/test_auth_okta.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,21 @@ def get_one_time_token():
209209
nonlocal second_token_generated
210210
if raise_token_refresh_error:
211211
assert not second_token_generated
212+
return "1token1"
212213
else:
213214
second_token_generated = True
214-
return "1token1"
215+
return "2token2"
215216

216217
# the first time, when step4 gets executed, we return 429
217218
# the second time when step4 gets retried, we return 200
218219
def mock_session_request(*args, **kwargs):
220+
nonlocal second_token_generated
221+
url = kwargs.get("url")
222+
assert url == (
223+
"https://testsso.snowflake.net/sso?RelayState=%2Fsome%2Fdeep%2Flink&onetimetoken=1token1"
224+
if not second_token_generated
225+
else "https://testsso.snowflake.net/sso?RelayState=%2Fsome%2Fdeep%2Flink&onetimetoken=2token2"
226+
)
219227
nonlocal raise_token_refresh_error
220228
if raise_token_refresh_error:
221229
raise_token_refresh_error = False

0 commit comments

Comments
 (0)