Skip to content

Commit e1327bb

Browse files
authored
Multi SSO - allow to pass sso ID for sso start method (#485)
1 parent 553dee7 commit e1327bb

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

descope/authmethod/sso.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ def start(
1212
return_url: Optional[str] = None,
1313
login_options: Optional[LoginOptions] = None,
1414
refresh_token: Optional[str] = None,
15+
prompt: Optional[str] = None,
16+
sso_id: Optional[str] = None,
1517
) -> dict:
1618
"""
1719
Start tenant sso session (saml/oidc based on tenant settings)
@@ -28,7 +30,12 @@ def start(
2830
validate_refresh_token_provided(login_options, refresh_token)
2931

3032
uri = EndpointsV1.auth_sso_start_path
31-
params = SSO._compose_start_params(tenant, return_url if return_url else "")
33+
params = SSO._compose_start_params(
34+
tenant,
35+
return_url if return_url else "",
36+
prompt if prompt else "",
37+
sso_id if sso_id else "",
38+
)
3239
response = self._auth.do_post(
3340
uri, login_options.__dict__ if login_options else {}, params, refresh_token
3441
)
@@ -40,8 +47,14 @@ def exchange_token(self, code: str) -> dict:
4047
return self._auth.exchange_token(uri, code)
4148

4249
@staticmethod
43-
def _compose_start_params(tenant: str, return_url: str) -> dict:
50+
def _compose_start_params(
51+
tenant: str, return_url: str, prompt: str, sso_id: str
52+
) -> dict:
4453
res = {"tenant": tenant}
4554
if return_url is not None and return_url != "":
4655
res["redirectURL"] = return_url
56+
if prompt is not None and prompt != "":
57+
res["prompt"] = prompt
58+
if sso_id is not None and sso_id != "":
59+
res["ssoId"] = sso_id
4760
return res

tests/test_sso.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,20 @@ def setUp(self) -> None:
2727

2828
def test_compose_start_params(self):
2929
self.assertEqual(
30-
SSO._compose_start_params("tenant1", "http://dummy.com"),
30+
SSO._compose_start_params("tenant1", "http://dummy.com", "", ""),
3131
{"tenant": "tenant1", "redirectURL": "http://dummy.com"},
3232
)
3333

34+
self.assertEqual(
35+
SSO._compose_start_params("tenant1", "http://dummy.com", "bla", "blue"),
36+
{
37+
"tenant": "tenant1",
38+
"redirectURL": "http://dummy.com",
39+
"prompt": "bla",
40+
"ssoId": "blue",
41+
},
42+
)
43+
3444
def test_sso_start(self):
3545
sso = SSO(Auth(self.dummy_project_id, self.public_key_dict))
3646

@@ -49,15 +59,19 @@ def test_sso_start(self):
4959

5060
with patch("requests.post") as mock_post:
5161
mock_post.return_value.ok = True
52-
sso.start("tenant1", "http://dummy.com")
62+
sso.start("tenant1", "http://dummy.com", sso_id="some-sso-id")
5363
expected_uri = f"{common.DEFAULT_BASE_URL}{EndpointsV1.auth_sso_start_path}"
5464
mock_post.assert_called_with(
5565
expected_uri,
5666
headers={
5767
**common.default_headers,
5868
"Authorization": f"Bearer {self.dummy_project_id}",
5969
},
60-
params={"tenant": "tenant1", "redirectURL": "http://dummy.com"},
70+
params={
71+
"tenant": "tenant1",
72+
"redirectURL": "http://dummy.com",
73+
"ssoId": "some-sso-id",
74+
},
6175
json={},
6276
allow_redirects=False,
6377
verify=True,

0 commit comments

Comments
 (0)