Отключить локальную аутентификацию для Переводчика Azure

Мне необходимо отключить локальную аутентификацию для служб Azure Cognitive, включая ресурс Translator, и перейти на использование TokenCredential.

В документации нет ни одного упоминания о том, как использовать TokenCredential с ресурсом-переводчиком, хотя TextTranslationClient можно создать с помощью экземпляра TokenCredential. Как и ожидалось, использование DefaultAzureCredential приводит к результату 401.

Отключение локальной аутентификации нарушает старую настройку, при которой токен получался путем вызова https://api.cognitive.microsoft.com/sts/v1.0/issueToken с первичным ключом.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отключите локальную проверку подлинности для Переводчика Azure.

Согласно MS-Document,

Если вы отключите локальную аутентификацию (аутентификацию по ключу), вам следует использовать только аутентификацию Microsoft entra ID, что означает, что ресурс должен быть создан с помощью custom subdomain.

Чтобы пройти аутентификацию с помощью Microsoft entra ID, я следовал приведенному выше документу и создал ресурс с собственным доменом, используя команду ниже.

Команда:

az cognitiveservices account create -n sampletext901 -g xxxx --kind TextTranslation --sku S1 -l global --custom-domain "venkat123" 

После создания конечная точка должна отображать имя субдомена, уникальное для вашего ресурса.

Вывод с конечными точками:

"endpoint": "https://api.cognitive.microsofttranslator.com/",
    "endpoints": {
      "Container": "https://venkat123.cognitiveservices.azure.com/",
      "DocumentTranslation": "https://venkat123.cognitiveservices.azure.com/",
      "TextTranslation": "https://venkat123.cognitiveservices.azure.com/",
      "TextTranslation-Global": "https://api.cognitive.microsofttranslator.com/",
      "Token": "https://venkat123.cognitiveservices.azure.com/"
    },

Теперь вам нужно создать регистрацию приложения и назначить Cognitive Services User, сверившись с приведенным выше документом.

В моей среде я отключил локальную аутентификацию и проверил с помощью команды ниже.

Команда и вывод:

PS /home/venkat> Get-AzCognitiveServicesAccount -ResourceGroupName venkatesan-rg -name sampletext901  

ResourceGroupName             : venkatesan-rg
AccountName                   : sampletext901
Id                            : /subscriptions/xxxx/resourceGroups/venkatesan-rg/providers/Microsoft.CognitiveServices/accounts/sampletext901
Endpoint                      : https://api.cognitive.microsofttranslator.com/
Location                      : global
Sku                           : Microsoft.Azure.Management.CognitiveServices.Models.Sku
AccountType                   : TextTranslation
ResourceType                  : Microsoft.CognitiveServices/accounts
Etag                          : "2500xx-0000-0700-0000-66594c060000"
ProvisioningState             : Succeeded
CustomSubDomainName           : venkat123
PublicNetworkAccess           : Enabled
Identity                      : 
Encryption                    : 
UserOwnedStorage              : 
PrivateEndpointConnections    : {}
ApiProperties                 : 
Properties                    : Microsoft.Azure.Management.CognitiveServices.Models.AccountProperties
RestrictOutboundNetworkAccess : 
AllowedFqdnList               : 
DisableLocalAuth              : True
NetworkRuleSet                : 
Capabilities                  : {CustomerManagedKey}

Выход:

Вы можете использовать код ниже, чтобы TextTranslationClient использовать Microsoft Entra ID с помощью .Net, следуя этому MS-Document.

Код:

using Azure;
using Azure.AI.Translation.Text;
using Azure.Identity;


string endpoint = "https://venkat123.cognitiveservices.azure.com/";
string tenantId = "xxxxx";
string clientId = "xxxx";
string clientSecret = "xxxx";

ClientSecretCredential credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

TextTranslationClient client = new TextTranslationClient(credential, new Uri(endpoint));

try
{
    string targetLanguage = "cs";
    string inputText = "This is a test.";

    Response<IReadOnlyList<TranslatedTextItem>> response = client.Translate(targetLanguage, inputText);
    IReadOnlyList<TranslatedTextItem> translations = response.Value;
    TranslatedTextItem translation = translations.FirstOrDefault();

    Console.WriteLine($"Detected languages of the input text: {translation?.DetectedLanguage?.Language} with score: {translation?.DetectedLanguage?.Confidence}.");
    Console.WriteLine($"Text was translated to: '{translation?.Translations?.FirstOrDefault().TargetLanguage}' and the result is: '{translation?.Translations?.FirstOrDefault()?.Text}'.");
}
catch (RequestFailedException exception)
{
    Console.WriteLine($"Error Code: {exception.ErrorCode}");
    Console.WriteLine($"Message: {exception.Message}");
}

Выход:

Detected languages of the input text: en with score: 1.
Text was translated to: 'cs' and the result is: 'Tohle je test.'.

Спасибо! Я думаю, что это работает (нужно копнуть немного дальше). Я делал именно то, что вы описали, но мне не хватало роли Cognitive Services User, потому что описание роли в Azure не имеет смысла: Lets you read and list keys of Cognitive Services.. Роль, назначенная моему SG, похоже, работает с DefaultAzureCredential.

magom001 03.06.2024 11:13

Привет ! Я столкнулся с той же проблемой, но с rest API. Какую область вы используете для DefaultAzureCredential?

nicolattu 11.06.2024 19:47
Authorization credential передать токен oauth2, создав поток учетных данных клиента.
Venkatesan 13.06.2024 09:26

Другие вопросы по теме