diff --git a/sdk/identity/azure-identity/inc/azure/identity/managed_identity_credential.hpp b/sdk/identity/azure-identity/inc/azure/identity/managed_identity_credential.hpp index 9d58a1686..958f91508 100644 --- a/sdk/identity/azure-identity/inc/azure/identity/managed_identity_credential.hpp +++ b/sdk/identity/azure-identity/inc/azure/identity/managed_identity_credential.hpp @@ -98,6 +98,16 @@ namespace Azure { namespace Identity { "There is no need to provide an ID (such as client, object, or resource ID) if you are " "using system-assigned managed identity."); } + + if (id.empty() + && (idType == ManagedIdentityIdType::ClientId || idType == ManagedIdentityIdType::ObjectId + || idType == ManagedIdentityIdType::ResourceId)) + { + throw std::invalid_argument( + "Provide the value of the client, object, or resource ID corresponding to the " + "ManagedIdentityIdType specified. The provided ID should not be empty in the case of " + "user-assigned managed identity."); + } } /** diff --git a/sdk/identity/azure-identity/src/managed_identity_credential.cpp b/sdk/identity/azure-identity/src/managed_identity_credential.cpp index 9a8fe9652..ab38a7951 100644 --- a/sdk/identity/azure-identity/src/managed_identity_credential.cpp +++ b/sdk/identity/azure-identity/src/managed_identity_credential.cpp @@ -78,6 +78,10 @@ ManagedIdentityCredential::ManagedIdentityCredential( m_managedIdentitySource = CreateManagedIdentitySource( GetCredentialName(), {}, {}, options.IdentityType.GetId(), options); break; + default: + throw std::invalid_argument( + "The ManagedIdentityIdType in the options is not set to one of the valid values."); + break; } } diff --git a/sdk/identity/azure-identity/test/ut/managed_identity_credential_test.cpp b/sdk/identity/azure-identity/test/ut/managed_identity_credential_test.cpp index efe1787dd..c19e546f6 100644 --- a/sdk/identity/azure-identity/test/ut/managed_identity_credential_test.cpp +++ b/sdk/identity/azure-identity/test/ut/managed_identity_credential_test.cpp @@ -77,6 +77,18 @@ TEST(ManagedIdentityType, Invalid) EXPECT_THROW( ManagedIdentityType(ManagedIdentityIdType::SystemAssigned, "clientId"), std::invalid_argument); + + EXPECT_THROW(ManagedIdentityType(ManagedIdentityIdType::ClientId, ""), std::invalid_argument); + EXPECT_THROW(ManagedIdentityType(ManagedIdentityIdType::ObjectId, ""), std::invalid_argument); + EXPECT_THROW(ManagedIdentityType(ManagedIdentityIdType::ResourceId, ""), std::invalid_argument); + + ManagedIdentityCredentialOptions options; + options.IdentityType = ManagedIdentityType(static_cast(99), ""); + std::unique_ptr managedIdentityCredentialWithInvalidOptions; + EXPECT_THROW( + managedIdentityCredentialWithInvalidOptions + = std::make_unique(options), + std::invalid_argument); } TEST(ManagedIdentityCredential, GetCredentialName)