Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-azure-identity for openSUSE:Factory checked in at 2023-10-11 23:56:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-azure-identity (Old) and /work/SRC/openSUSE:Factory/.python-azure-identity.new.1807 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-azure-identity" Wed Oct 11 23:56:37 2023 rev:20 rq:1116973 version:1.14.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-azure-identity/python-azure-identity.changes 2023-08-14 22:36:20.632638990 +0200 +++ /work/SRC/openSUSE:Factory/.python-azure-identity.new.1807/python-azure-identity.changes 2023-10-12 11:51:58.142504026 +0200 @@ -1,0 +2,8 @@ +Tue Oct 10 08:36:14 UTC 2023 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- New upstream release + + Version 1.14.1 + + For detailed information about changes see the + CHANGELOG.md file provided with this package + +------------------------------------------------------------------- Old: ---- azure-identity-1.14.0.zip New: ---- azure-identity-1.14.1.zip ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-azure-identity.spec ++++++ --- /var/tmp/diff_new_pack.Gy6ZZw/_old 2023-10-12 11:51:58.722524692 +0200 +++ /var/tmp/diff_new_pack.Gy6ZZw/_new 2023-10-12 11:51:58.726524834 +0200 @@ -21,7 +21,7 @@ %define skip_python2 1 %endif Name: python-azure-identity -Version: 1.14.0 +Version: 1.14.1 Release: 0 Summary: Azure Identity client library for Python License: MIT ++++++ azure-identity-1.14.0.zip -> azure-identity-1.14.1.zip ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/CHANGELOG.md new/azure-identity-1.14.1/CHANGELOG.md --- old/azure-identity-1.14.0/CHANGELOG.md 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/CHANGELOG.md 2023-10-09 21:39:44.000000000 +0200 @@ -1,5 +1,33 @@ # Release History +## 1.14.1 (2023-10-09) + +### Bugs Fixed + +- Bug fixes for developer credentials + +## 1.15.0b1 (2023-09-12) + +### Features Added + +- Added Windows Web Account Manager (WAM) Brokered Authentication support. +- Added `enable_msa_passthrough` suppport for `InteractiveBrowserCredential`. By default `InteractiveBrowserCredential` only lists AAD accounts. If you set `enable_msa_passthrough` to `True`, it lists both AAD accounts and MSA outlook.com accounts that are logged in to Windows. + +### Bugs Fixed + +- Ensure `AzurePowershellCredential` calls PowerShell with the `-NoProfile` flag to avoid loading user profiles for more consistent behavior. ([#31682](https://github.com/Azure/azure-sdk-for-python/pull/31682)) +- Fixed an issue with subprocess-based developer credentials (such as AzureCliCredential) where the process would sometimes hang waiting for user input. ([#31534](https://github.com/Azure/azure-sdk-for-python/pull/31534)) +- Fixed an issue with `ClientAssertionCredential` not properly checking if CAE should be enabled. ([#31544](https://github.com/Azure/azure-sdk-for-python/pull/31544)) +- `ManagedIdentityCredential` will fall through to the next credential in the chain in the case that Docker Desktop returns a 403 response when attempting to access the IMDS endpoint. ([#31824](https://github.com/Azure/azure-sdk-for-python/pull/31824)) + +### Other Changes + +- Update typing of async credentials to match the `AsyncTokenCredential` protocol. +- If within `DefaultAzureCredential`, `EnvironmentCredential` will now use log level INFO instead of WARNING to inform users of an incomplete environment configuration. ([#31814](https://github.com/Azure/azure-sdk-for-python/pull/31814)) +- Strengthened `AzureCliCredential` and `AzureDeveloperCliCredential` error checking when determining if a user is logged in or not. Now, if an AADSTS error exists in the error, the full error message is propagated instead of a canned error message. ([#30047](https://github.com/Azure/azure-sdk-for-python/pull/30047)) +- `ManagedIdentityCredential` instances using IMDS will now be allowed to continue sending requests to the IMDS endpoint even after previous attempts failed. This is to prevent credential instances from potentially being permanently disabled after a temporary network failure. +- IMDS endpoint probes in `ManagedIdentityCredential` will now only occur when inside a credential chain such as `DefaultAzureCredential`. This probe request timeout has been increased to 1 second from 0.3 seconds to reduce the likelihood of false negatives. + ## 1.14.0 (2023-08-08) ### Features Added diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/PKG-INFO new/azure-identity-1.14.1/PKG-INFO --- old/azure-identity-1.14.0/PKG-INFO 2023-08-08 23:44:22.000000000 +0200 +++ new/azure-identity-1.14.1/PKG-INFO 2023-10-09 21:40:38.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-identity -Version: 1.14.0 +Version: 1.14.1 Summary: Microsoft Azure Identity Library for Python Home-page: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity Author: Microsoft Corporation @@ -19,6 +19,10 @@ Requires-Python: >=3.7 Description-Content-Type: text/markdown License-File: LICENSE +Requires-Dist: azure-core<2.0.0,>=1.11.0 +Requires-Dist: cryptography>=2.5 +Requires-Dist: msal<2.0.0,>=1.20.0 +Requires-Dist: msal-extensions<2.0.0,>=0.3.0 # Azure Identity client library for Python @@ -413,6 +417,34 @@ # Release History +## 1.14.1 (2023-10-09) + +### Bugs Fixed + +- Bug fixes for developer credentials + +## 1.15.0b1 (2023-09-12) + +### Features Added + +- Added Windows Web Account Manager (WAM) Brokered Authentication support. +- Added `enable_msa_passthrough` suppport for `InteractiveBrowserCredential`. By default `InteractiveBrowserCredential` only lists AAD accounts. If you set `enable_msa_passthrough` to `True`, it lists both AAD accounts and MSA outlook.com accounts that are logged in to Windows. + +### Bugs Fixed + +- Ensure `AzurePowershellCredential` calls PowerShell with the `-NoProfile` flag to avoid loading user profiles for more consistent behavior. ([#31682](https://github.com/Azure/azure-sdk-for-python/pull/31682)) +- Fixed an issue with subprocess-based developer credentials (such as AzureCliCredential) where the process would sometimes hang waiting for user input. ([#31534](https://github.com/Azure/azure-sdk-for-python/pull/31534)) +- Fixed an issue with `ClientAssertionCredential` not properly checking if CAE should be enabled. ([#31544](https://github.com/Azure/azure-sdk-for-python/pull/31544)) +- `ManagedIdentityCredential` will fall through to the next credential in the chain in the case that Docker Desktop returns a 403 response when attempting to access the IMDS endpoint. ([#31824](https://github.com/Azure/azure-sdk-for-python/pull/31824)) + +### Other Changes + +- Update typing of async credentials to match the `AsyncTokenCredential` protocol. +- If within `DefaultAzureCredential`, `EnvironmentCredential` will now use log level INFO instead of WARNING to inform users of an incomplete environment configuration. ([#31814](https://github.com/Azure/azure-sdk-for-python/pull/31814)) +- Strengthened `AzureCliCredential` and `AzureDeveloperCliCredential` error checking when determining if a user is logged in or not. Now, if an AADSTS error exists in the error, the full error message is propagated instead of a canned error message. ([#30047](https://github.com/Azure/azure-sdk-for-python/pull/30047)) +- `ManagedIdentityCredential` instances using IMDS will now be allowed to continue sending requests to the IMDS endpoint even after previous attempts failed. This is to prevent credential instances from potentially being permanently disabled after a temporary network failure. +- IMDS endpoint probes in `ManagedIdentityCredential` will now only occur when inside a credential chain such as `DefaultAzureCredential`. This probe request timeout has been increased to 1 second from 0.3 seconds to reduce the likelihood of false negatives. + ## 1.14.0 (2023-08-08) ### Features Added diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/_credentials/azd_cli.py new/azure-identity-1.14.1/azure/identity/_credentials/azd_cli.py --- old/azure-identity-1.14.0/azure/identity/_credentials/azd_cli.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/_credentials/azd_cli.py 2023-10-09 21:39:44.000000000 +0200 @@ -16,7 +16,7 @@ from azure.core.exceptions import ClientAuthenticationError from .. import CredentialUnavailableError -from .._internal import resolve_tenant, within_dac +from .._internal import resolve_tenant, within_dac, validate_tenant_id, validate_scope from .._internal.decorators import log_get_token CLI_NOT_FOUND = ( @@ -76,7 +76,8 @@ additionally_allowed_tenants: Optional[List[str]] = None, process_timeout: int = 10, ) -> None: - + if tenant_id: + validate_tenant_id(tenant_id) self.tenant_id = tenant_id self._additionally_allowed_tenants = additionally_allowed_tenants or [] self._process_timeout = process_timeout @@ -121,6 +122,11 @@ if not scopes: raise ValueError("Missing scope in request. \n") + if tenant_id: + validate_tenant_id(tenant_id) + for scope in scopes: + validate_scope(scope) + commandString = " --scope ".join(scopes) command = COMMAND_LINE.format(commandString) tenant = resolve_tenant( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/_credentials/azure_cli.py new/azure-identity-1.14.1/azure/identity/_credentials/azure_cli.py --- old/azure-identity-1.14.0/azure/identity/_credentials/azure_cli.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/_credentials/azure_cli.py 2023-10-09 21:39:44.000000000 +0200 @@ -16,7 +16,7 @@ from azure.core.exceptions import ClientAuthenticationError from .. import CredentialUnavailableError -from .._internal import _scopes_to_resource, resolve_tenant, within_dac +from .._internal import _scopes_to_resource, resolve_tenant, within_dac, validate_tenant_id, validate_scope from .._internal.decorators import log_get_token @@ -54,7 +54,8 @@ additionally_allowed_tenants: Optional[List[str]] = None, process_timeout: int = 10, ) -> None: - + if tenant_id: + validate_tenant_id(tenant_id) self.tenant_id = tenant_id self._additionally_allowed_tenants = additionally_allowed_tenants or [] self._process_timeout = process_timeout @@ -94,6 +95,10 @@ :raises ~azure.core.exceptions.ClientAuthenticationError: the credential invoked the Azure CLI but didn't receive an access token. """ + if tenant_id: + validate_tenant_id(tenant_id) + for scope in scopes: + validate_scope(scope) resource = _scopes_to_resource(*scopes) command = COMMAND_LINE.format(resource) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/_credentials/azure_powershell.py new/azure-identity-1.14.1/azure/identity/_credentials/azure_powershell.py --- old/azure-identity-1.14.0/azure/identity/_credentials/azure_powershell.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/_credentials/azure_powershell.py 2023-10-09 21:39:44.000000000 +0200 @@ -13,7 +13,7 @@ from .azure_cli import get_safe_working_dir from .. import CredentialUnavailableError -from .._internal import _scopes_to_resource, resolve_tenant, within_dac +from .._internal import _scopes_to_resource, resolve_tenant, within_dac, validate_tenant_id, validate_scope from .._internal.decorators import log_get_token @@ -68,7 +68,8 @@ additionally_allowed_tenants: Optional[List[str]] = None, process_timeout: int = 10, ) -> None: - + if tenant_id: + validate_tenant_id(tenant_id) self.tenant_id = tenant_id self._additionally_allowed_tenants = additionally_allowed_tenants or [] self._process_timeout = process_timeout @@ -109,6 +110,11 @@ :raises ~azure.core.exceptions.ClientAuthenticationError: the credential invoked Azure PowerShell but didn't receive an access token """ + if tenant_id: + validate_tenant_id(tenant_id) + for scope in scopes: + validate_scope(scope) + tenant_id = resolve_tenant( default_tenant=self.tenant_id, tenant_id=tenant_id, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/_internal/__init__.py new/azure-identity-1.14.1/azure/identity/_internal/__init__.py --- old/azure-identity-1.14.0/azure/identity/_internal/__init__.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/_internal/__init__.py 2023-10-09 21:39:44.000000000 +0200 @@ -12,6 +12,7 @@ get_default_authority, normalize_authority, resolve_tenant, + validate_scope, validate_tenant_id, within_credential_chain, within_dac, @@ -47,6 +48,7 @@ "InteractiveCredential", "normalize_authority", "resolve_tenant", + "validate_scope", "within_credential_chain", "within_dac", "wrap_exceptions", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/_internal/utils.py new/azure-identity-1.14.1/azure/identity/_internal/utils.py --- old/azure-identity-1.14.0/azure/identity/_internal/utils.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/_internal/utils.py 2023-10-09 21:39:44.000000000 +0200 @@ -5,6 +5,7 @@ import os import logging from contextvars import ContextVar +from string import ascii_letters, digits from typing import List, Optional from urllib.parse import urlparse @@ -17,6 +18,9 @@ _LOGGER = logging.getLogger(__name__) +VALID_TENANT_ID_CHARACTERS = frozenset(ascii_letters + digits + "-.") +VALID_SCOPE_CHARACTERS = frozenset(ascii_letters + digits + "_-.:/") + def normalize_authority(authority: str) -> str: """Ensure authority uses https, strip trailing spaces and /. @@ -43,19 +47,28 @@ return normalize_authority(authority) -VALID_TENANT_ID_CHARACTERS = frozenset("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789" + "-.") +def validate_scope(scope: str) -> None: + """Raise ValueError if scope is empty or contains a character invalid for a scope + + :param str scope: scope to validate + :raises: ValueError if scope is empty or contains a character invalid for a scope. + """ + if not scope or any(c not in VALID_SCOPE_CHARACTERS for c in scope): + raise ValueError( + "An invalid scope was provided. Only alphanumeric characters, '.', '-', '_', ':', and '/' are allowed." + ) def validate_tenant_id(tenant_id: str) -> None: """Raise ValueError if tenant_id is empty or contains a character invalid for a tenant ID. - :param str tenant_id: tenant id to validate + :param str tenant_id: tenant ID to validate :raises: ValueError if tenant_id is empty or contains a character invalid for a tenant ID. """ if not tenant_id or any(c not in VALID_TENANT_ID_CHARACTERS for c in tenant_id): raise ValueError( - "Invalid tenant id provided. You can locate your tenant id by following the instructions here: " - + "https://docs.microsoft.com/partner-center/find-ids-and-domain-names" + "Invalid tenant ID provided. You can locate your tenant ID by following the instructions here: " + + "https://learn.microsoft.com/partner-center/find-ids-and-domain-names" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/_version.py new/azure-identity-1.14.1/azure/identity/_version.py --- old/azure-identity-1.14.0/azure/identity/_version.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/_version.py 2023-10-09 21:39:44.000000000 +0200 @@ -2,4 +2,4 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # ------------------------------------ -VERSION = "1.14.0" +VERSION = "1.14.1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/aio/_credentials/azd_cli.py new/azure-identity-1.14.1/azure/identity/aio/_credentials/azd_cli.py --- old/azure-identity-1.14.0/azure/identity/aio/_credentials/azd_cli.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/aio/_credentials/azd_cli.py 2023-10-09 21:39:44.000000000 +0200 @@ -23,7 +23,7 @@ parse_token, sanitize_output, ) -from ..._internal import resolve_tenant, within_dac +from ..._internal import resolve_tenant, within_dac, validate_tenant_id, validate_scope class AzureDeveloperCliCredential(AsyncContextManager): @@ -73,7 +73,8 @@ additionally_allowed_tenants: Optional[List[str]] = None, process_timeout: int = 10, ) -> None: - + if tenant_id: + validate_tenant_id(tenant_id) self.tenant_id = tenant_id self._additionally_allowed_tenants = additionally_allowed_tenants or [] self._process_timeout = process_timeout @@ -110,6 +111,11 @@ if not scopes: raise ValueError("Missing scope in request. \n") + if tenant_id: + validate_tenant_id(tenant_id) + for scope in scopes: + validate_scope(scope) + commandString = " --scope ".join(scopes) command = COMMAND_LINE.format(commandString) tenant = resolve_tenant( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/aio/_credentials/azure_cli.py new/azure-identity-1.14.1/azure/identity/aio/_credentials/azure_cli.py --- old/azure-identity-1.14.0/azure/identity/aio/_credentials/azure_cli.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/aio/_credentials/azure_cli.py 2023-10-09 21:39:44.000000000 +0200 @@ -23,7 +23,7 @@ parse_token, sanitize_output, ) -from ..._internal import _scopes_to_resource, resolve_tenant, within_dac +from ..._internal import _scopes_to_resource, resolve_tenant, within_dac, validate_tenant_id, validate_scope class AzureCliCredential(AsyncContextManager): @@ -54,7 +54,8 @@ additionally_allowed_tenants: Optional[List[str]] = None, process_timeout: int = 10, ) -> None: - + if tenant_id: + validate_tenant_id(tenant_id) self.tenant_id = tenant_id self._additionally_allowed_tenants = additionally_allowed_tenants or [] self._process_timeout = process_timeout @@ -88,6 +89,11 @@ if sys.platform.startswith("win") and not isinstance(asyncio.get_event_loop(), asyncio.ProactorEventLoop): return _SyncAzureCliCredential().get_token(*scopes, tenant_id=tenant_id, **kwargs) + if tenant_id: + validate_tenant_id(tenant_id) + for scope in scopes: + validate_scope(scope) + resource = _scopes_to_resource(*scopes) command = COMMAND_LINE.format(resource) tenant = resolve_tenant( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure/identity/aio/_credentials/azure_powershell.py new/azure-identity-1.14.1/azure/identity/aio/_credentials/azure_powershell.py --- old/azure-identity-1.14.0/azure/identity/aio/_credentials/azure_powershell.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/azure/identity/aio/_credentials/azure_powershell.py 2023-10-09 21:39:44.000000000 +0200 @@ -17,7 +17,7 @@ raise_for_error, parse_token, ) -from ..._internal import resolve_tenant +from ..._internal import resolve_tenant, validate_tenant_id, validate_scope class AzurePowerShellCredential(AsyncContextManager): @@ -48,7 +48,8 @@ additionally_allowed_tenants: Optional[List[str]] = None, process_timeout: int = 10, ) -> None: - + if tenant_id: + validate_tenant_id(tenant_id) self.tenant_id = tenant_id self._additionally_allowed_tenants = additionally_allowed_tenants or [] self._process_timeout = process_timeout @@ -83,6 +84,11 @@ if sys.platform.startswith("win") and not isinstance(asyncio.get_event_loop(), asyncio.ProactorEventLoop): return _SyncCredential().get_token(*scopes, tenant_id=tenant_id, **kwargs) + if tenant_id: + validate_tenant_id(tenant_id) + for scope in scopes: + validate_scope(scope) + tenant_id = resolve_tenant( default_tenant=self.tenant_id, tenant_id=tenant_id, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/azure_identity.egg-info/PKG-INFO new/azure-identity-1.14.1/azure_identity.egg-info/PKG-INFO --- old/azure-identity-1.14.0/azure_identity.egg-info/PKG-INFO 2023-08-08 23:44:22.000000000 +0200 +++ new/azure-identity-1.14.1/azure_identity.egg-info/PKG-INFO 2023-10-09 21:40:38.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: azure-identity -Version: 1.14.0 +Version: 1.14.1 Summary: Microsoft Azure Identity Library for Python Home-page: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity Author: Microsoft Corporation @@ -19,6 +19,10 @@ Requires-Python: >=3.7 Description-Content-Type: text/markdown License-File: LICENSE +Requires-Dist: azure-core<2.0.0,>=1.11.0 +Requires-Dist: cryptography>=2.5 +Requires-Dist: msal<2.0.0,>=1.20.0 +Requires-Dist: msal-extensions<2.0.0,>=0.3.0 # Azure Identity client library for Python @@ -413,6 +417,34 @@ # Release History +## 1.14.1 (2023-10-09) + +### Bugs Fixed + +- Bug fixes for developer credentials + +## 1.15.0b1 (2023-09-12) + +### Features Added + +- Added Windows Web Account Manager (WAM) Brokered Authentication support. +- Added `enable_msa_passthrough` suppport for `InteractiveBrowserCredential`. By default `InteractiveBrowserCredential` only lists AAD accounts. If you set `enable_msa_passthrough` to `True`, it lists both AAD accounts and MSA outlook.com accounts that are logged in to Windows. + +### Bugs Fixed + +- Ensure `AzurePowershellCredential` calls PowerShell with the `-NoProfile` flag to avoid loading user profiles for more consistent behavior. ([#31682](https://github.com/Azure/azure-sdk-for-python/pull/31682)) +- Fixed an issue with subprocess-based developer credentials (such as AzureCliCredential) where the process would sometimes hang waiting for user input. ([#31534](https://github.com/Azure/azure-sdk-for-python/pull/31534)) +- Fixed an issue with `ClientAssertionCredential` not properly checking if CAE should be enabled. ([#31544](https://github.com/Azure/azure-sdk-for-python/pull/31544)) +- `ManagedIdentityCredential` will fall through to the next credential in the chain in the case that Docker Desktop returns a 403 response when attempting to access the IMDS endpoint. ([#31824](https://github.com/Azure/azure-sdk-for-python/pull/31824)) + +### Other Changes + +- Update typing of async credentials to match the `AsyncTokenCredential` protocol. +- If within `DefaultAzureCredential`, `EnvironmentCredential` will now use log level INFO instead of WARNING to inform users of an incomplete environment configuration. ([#31814](https://github.com/Azure/azure-sdk-for-python/pull/31814)) +- Strengthened `AzureCliCredential` and `AzureDeveloperCliCredential` error checking when determining if a user is logged in or not. Now, if an AADSTS error exists in the error, the full error message is propagated instead of a canned error message. ([#30047](https://github.com/Azure/azure-sdk-for-python/pull/30047)) +- `ManagedIdentityCredential` instances using IMDS will now be allowed to continue sending requests to the IMDS endpoint even after previous attempts failed. This is to prevent credential instances from potentially being permanently disabled after a temporary network failure. +- IMDS endpoint probes in `ManagedIdentityCredential` will now only occur when inside a credential chain such as `DefaultAzureCredential`. This probe request timeout has been increased to 1 second from 0.3 seconds to reduce the likelihood of false negatives. + ## 1.14.0 (2023-08-08) ### Features Added diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/tests/test_powershell_credential.py new/azure-identity-1.14.1/tests/test_powershell_credential.py --- old/azure-identity-1.14.0/tests/test_powershell_credential.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/tests/test_powershell_credential.py 2023-10-09 21:39:44.000000000 +0200 @@ -110,7 +110,7 @@ Popen = get_mock_Popen(stdout=stdout, stderr=stderr) with patch(POPEN, Popen): - token = AzurePowerShellCredential().get_token(scope, tenant_id="tenant_id") + token = AzurePowerShellCredential().get_token(scope, tenant_id="tenant-id") assert token.token == expected_access_token assert token.expires_on == expected_expires_on @@ -315,5 +315,5 @@ assert token.token == expected_token with patch.dict("os.environ", {EnvironmentVariables.AZURE_IDENTITY_DISABLE_MULTITENANTAUTH: "true"}): - token = credential.get_token("scope", tenant_id="some tenant") + token = credential.get_token("scope", tenant_id="some-tenant") assert token.token == expected_token diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-identity-1.14.0/tests/test_powershell_credential_async.py new/azure-identity-1.14.1/tests/test_powershell_credential_async.py --- old/azure-identity-1.14.0/tests/test_powershell_credential_async.py 2023-08-08 23:43:26.000000000 +0200 +++ new/azure-identity-1.14.1/tests/test_powershell_credential_async.py 2023-10-09 21:39:44.000000000 +0200 @@ -97,7 +97,7 @@ mock_exec = get_mock_exec(stdout=stdout, stderr=stderr) with patch(CREATE_SUBPROCESS_EXEC, mock_exec): - token = await AzurePowerShellCredential().get_token(scope, tenant_id="tenant_id") + token = await AzurePowerShellCredential().get_token(scope, tenant_id="tenant-id") assert token.token == expected_access_token assert token.expires_on == expected_expires_on @@ -313,5 +313,5 @@ assert token.token == expected_token with patch.dict("os.environ", {EnvironmentVariables.AZURE_IDENTITY_DISABLE_MULTITENANTAUTH: "true"}): - token = await credential.get_token("scope", tenant_id="some tenant") + token = await credential.get_token("scope", tenant_id="some-tenant") assert token.token == expected_token