@@ -867,11 +867,16 @@ def check_connectivity(url='https://azure.microsoft.com', max_retries=5, timeout
867867
868868
869869def send_raw_request (cli_ctx , method , url , headers = None , uri_parameters = None , # pylint: disable=too-many-locals,too-many-branches,too-many-statements
870- body = None , skip_authorization_header = False , resource = None , output_file = None ,
870+ body = None , skip_authorization_header = False , resource = None , scopes = None , output_file = None ,
871871 generated_client_request_id_name = 'x-ms-client-request-id' ):
872872 import uuid
873873 from requests import Session , Request
874874 from requests .structures import CaseInsensitiveDict
875+ from .auth .util import resource_to_scopes
876+
877+ # Use MSAL-styled scopes instead of ADAL-styled resource
878+ if resource and not scopes :
879+ scopes = resource_to_scopes (resource )
875880
876881 result = CaseInsensitiveDict ()
877882 for s in headers or []:
@@ -952,13 +957,13 @@ def send_raw_request(cli_ctx, method, url, headers=None, uri_parameters=None, #
952957
953958 # Prepare the Bearer token for `Authorization` header
954959 if not skip_authorization_header and url .lower ().startswith ('https://' ):
955- # Prepare `resource ` for `get_raw_token`
956- if not resource :
960+ # Prepare `scopes ` for `get_raw_token`
961+ if not scopes :
957962 # If url starts with ARM endpoint, like `https://management.azure.com/`,
958- # use `active_directory_resource_id` for resource , like `https://management.core.windows.net/`.
963+ # use `active_directory_resource_id` for scopes , like `https://management.core.windows.net//.default `.
959964 # This follows the same behavior as `azure.cli.core.commands.client_factory._get_mgmt_service_client`
960965 if url .lower ().startswith (endpoints .resource_manager .rstrip ('/' )):
961- resource = endpoints .active_directory_resource_id
966+ scopes = resource_to_scopes ( endpoints .active_directory_resource_id )
962967 else :
963968 from azure .cli .core .cloud import CloudEndpointNotSetException
964969 for p in [x for x in dir (endpoints ) if not x .startswith ('_' )]:
@@ -967,9 +972,9 @@ def send_raw_request(cli_ctx, method, url, headers=None, uri_parameters=None, #
967972 except CloudEndpointNotSetException :
968973 continue
969974 if isinstance (value , str ) and url .lower ().startswith (value .lower ()):
970- resource = value
975+ scopes = resource_to_scopes ( value )
971976 break
972- if resource :
977+ if scopes :
973978 # Prepare `subscription` for `get_raw_token`
974979 # If this is an ARM request, try to extract subscription ID from the URL.
975980 # But there are APIs which don't require subscription ID, like /subscriptions, /tenants
@@ -979,17 +984,17 @@ def send_raw_request(cli_ctx, method, url, headers=None, uri_parameters=None, #
979984 if url .lower ().startswith (endpoints .resource_manager .rstrip ('/' )):
980985 token_subscription = _extract_subscription_id (url )
981986 if token_subscription :
982- logger .debug ('Retrieving token for resource %s, subscription %s' , resource , token_subscription )
983- token_info , _ , _ = profile .get_raw_token (resource , subscription = token_subscription )
987+ logger .debug ('Retrieving token for scopes %s, subscription %s' , scopes , token_subscription )
988+ token_info , _ , _ = profile .get_raw_token (scopes = scopes , subscription = token_subscription )
984989 else :
985- logger .debug ('Retrieving token for resource %s' , resource )
986- token_info , _ , _ = profile .get_raw_token (resource )
990+ logger .debug ('Retrieving token for scopes %s' , scopes )
991+ token_info , _ , _ = profile .get_raw_token (scopes = scopes )
987992 token_type , token , _ = token_info
988993 headers = headers or {}
989994 headers ['Authorization' ] = '{} {}' .format (token_type , token )
990995 else :
991- logger .warning ("Can't derive appropriate Azure AD resource from --url to acquire an access token. "
992- "If access token is required, use --resource to specify the resource " )
996+ logger .warning ("Can't derive appropriate Microsoft Entra ID scopes from --url to acquire an access token. "
997+ "If access token is required, use --scope to specify the scopes " )
993998
994999 # https://requests.readthedocs.io/en/latest/user/advanced/#prepared-requests
9951000 s = Session ()
0 commit comments