// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. #include #include #include #include #include #include int main() { try { // To diagnose, see https://aka.ms/azsdk/cpp/identity/troubleshooting // For example, try setting 'AZURE_LOG_LEVEL' environment variable to 'verbose' before running // this sample to see more details. // Step 1: Initialize Chained Token Credential. // A configuration demonstrated below would authenticate using EnvironmentCredential if it is // available, and if it is not available, would fall back to use AzureCliCredential, and then to // ManagedIdentityCredential. auto chainedTokenCredential = std::make_shared( Azure::Identity::ChainedTokenCredential::Sources{ std::make_shared(), std::make_shared(), std::make_shared()}); // Step 2: Pass the credential to an Azure Service Client. Azure::Service::Client azureServiceClient("serviceUrl", chainedTokenCredential); // Step 3: Start using the Azure Service Client. azureServiceClient.DoSomething(); std::cout << "Success!" << std::endl; } catch (const Azure::Core::Credentials::AuthenticationException& exception) { // Step 4: Handle authentication errors, if needed // (invalid credential parameters, insufficient permissions). std::cout << "Authentication error: " << exception.what() << std::endl; return 1; } catch (const Azure::Core::RequestFailedException& exception) { // Authentication exceptions are thrown as AuthenticationExceptions, client errors are thrown as // RequestFailedExceptions, so it is easier to differentiate whether the request has failed // due to input data, or due to authentication errors. std::cout << "Azure service request error: " << exception.what() << std::endl << "Status: " << static_cast(exception.StatusCode) << " " << exception.ReasonPhrase << std::endl << "Error code: " << exception.ErrorCode << std::endl << "Request ID: " << exception.RequestId << std::endl << "Message: " << exception.Message << std::endl; return 2; } catch (const std::exception& exception) { std::cout << "Unexpected exception thrown: " << exception.what() << std::endl; return 3; } return 0; }