33# Licensed under the MIT License. See License.txt in the project root for license information.
44# --------------------------------------------------------------------------------------------
55
6+ import cmd
67import json
78import os
89import re
@@ -145,7 +146,7 @@ def _service_principal_store(self):
145146 Identity ._service_principal_store_instance = ServicePrincipalStore (store )
146147 return Identity ._service_principal_store_instance
147148
148- def login_with_auth_code (self , scopes , claims_challenge = None ):
149+ def login_with_auth_code (self , scopes , claims_challenge = None , use_broker_sso = False ):
149150 # Emit a warning to inform that a browser is opened.
150151 # Only show the path part of the URL and hide the query string.
151152
@@ -161,15 +162,31 @@ def _prompt_launching_ui(ui=None, **_):
161162 from .util import read_response_templates
162163 success_template , error_template = read_response_templates ()
163164
165+ from .agentic_session import is_agentic_session
166+ is_agentic_session_value = is_agentic_session ()
167+ enable_broker_on_windows = cmd .cli_ctx .config .getboolean ('core' , 'enable_broker_on_windows' , fallback = True )
168+ # Broker is available only on Windows for now
169+ broker_sso_available = sys .platform .startswith ('win' ) and enable_broker_on_windows
170+ logger .debug ("use_broker_sso: %s, is_agentic_session: %s, broker_sso_available: %s" ,
171+ use_broker_sso , is_agentic_session_value , broker_sso_available )
172+ use_broker_sso = (use_broker_sso or is_agentic_session_value ) and broker_sso_available
173+ prompt = 'none' if use_broker_sso else 'select_account'
174+
164175 # For AAD, use port 0 to let the system choose arbitrary unused ephemeral port to avoid port collision
165176 # on port 8400 from the old design. However, ADFS only allows port 8400.
166177 result = self ._msal_app .acquire_token_interactive (
167- scopes , prompt = 'select_account' , port = 8400 if self ._is_adfs else None ,
178+ scopes ,
179+ prompt = prompt ,
180+ port = 8400 if self ._is_adfs else None ,
168181 success_template = success_template , error_template = error_template ,
169182 parent_window_handle = self ._msal_app .CONSOLE_WINDOW_HANDLE , on_before_launching_ui = _prompt_launching_ui ,
170183 enable_msa_passthrough = True ,
171184 claims_challenge = claims_challenge )
172- return check_result (result )
185+ parsed = check_result (result )
186+ if use_broker_sso :
187+ # log parsed result in debug level
188+ logger .debug ("Result from broker SSO login: %s" , json .dumps (parsed , indent = 4 ))
189+ return parsed
173190
174191 def login_with_device_code (self , scopes , claims_challenge = None ):
175192 flow = self ._msal_app .initiate_device_flow (scopes , claims_challenge = claims_challenge )
0 commit comments