Skip to content
10 changes: 7 additions & 3 deletions src/azure-cli/azure/cli/command_modules/acr/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,12 +276,16 @@ def acr_login(cmd,
password=password,
resource_group_name=resource_group_name)

logger.warning("You can perform manual login using the provided access token below, "
"for example: 'docker login loginServer -u %s -p accessToken'", EMPTY_GUID)
logger.warning("Note: The token in both the accessToken and refreshToken fields is an ACR Refresh Token, not an ACR Access Token. This ACR Refresh Token cannot be used directly to authenticate with registry APIs such as pushing/pulling images and listing repositories/tags. This ACR Refresh Token must be subsequently exchanged for an ACR Access. Please see https://aka.ms/acr/auth/oauth")

logger.warning("You can perform manual login using the provided refresh token below, "
Comment thread
wangxiaoxuan273 marked this conversation as resolved.
"for example: 'docker login loginServer -u %s -p refreshToken'", EMPTY_GUID)

token_info = {
"loginServer": login_server,
"accessToken": password
"username": EMPTY_GUID,
"accessToken": password,
"refreshToken": password
}

return token_info
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

from azure.cli.testsdk.scenario_tests import AllowLargeResponse
from azure.cli.testsdk import ScenarioTest, ResourceGroupPreparer, KeyVaultPreparer, record_only, live_only
from azure.cli.command_modules.acr.custom import DEF_DIAG_SETTINGS_NAME_TEMPLATE

from azure.cli.command_modules.acr.custom import DEF_DIAG_SETTINGS_NAME_TEMPLATE, EMPTY_GUID

class AcrCommandsTests(ScenarioTest):

Expand Down Expand Up @@ -103,6 +102,28 @@ def test_check_name_availability(self):
self.check('nameAvailable', True)
])

@ResourceGroupPreparer()
def test_acr_login_expose_token(self, resource_group):
registry_name = self.create_random_name('clireg', 20)

self.kwargs.update({
'registry_name': registry_name,
'rg': resource_group,
'sku': 'Premium'
})

self.cmd('acr create -n {registry_name} -g {rg} --sku {sku}',
checks=[self.check('name', '{registry_name}'),
self.check('provisioningState', 'Succeeded')])

tokens = self.cmd('acr login -n {} --expose-token'.format(registry_name), checks=[
self.exists('accessToken'),
self.exists('refreshToken'),
self.exists('loginServer'),
self.check('username', EMPTY_GUID)]).get_output_in_json()

self.assertEqual(tokens['accessToken'], tokens['refreshToken'])

@ResourceGroupPreparer()
def test_acr_create_with_managed_registry(self, resource_group, resource_group_location):
registry_name = self.create_random_name('clireg', 20)
Expand Down