Не удается получить токен доступа Azure Oauth V2 в C#

#c# #azure #active-directory #azure-webapps

#c# #azure #active-directory #azure-webapps

Вопрос:

Я пытаюсь получить токен доступа из веб-приложения Azure … приложения C # MVC. Вот код, который я использую.

     public string GetToken()
    {
        string authority = string.Format(CultureInfo.InvariantCulture, AuthEndPoint, tenantId);

        var credential = new ClientCredential(clientId, clientSecret);
        AuthenticationContext authContext = new AuthenticationContext(authority,true);

        var token = authContext.AcquireTokenAsync(AzureResourceID, credential).Result.AccessToken;
        return token.ToString();
    }
  

Если я удалю версию V2.0 с конца строки полномочий, приложение успешно вернет токен доступа версии V1.0.

Как мне получить токен версии 2.0?

Комментарии:

1. Какое значение AzureResourceID в вашем коде?

2. Я пытаюсь подключиться к базе данных SQL Azure из веб-приложения Azure, используя делегированный доступ на основе пользователя Azure AD, вошедшего в веб-приложение Azure.

3. AzureResourceID=» database.windows.net »

4. Какие-либо другие проблемы? Если нет, пожалуйста, примите это как ответ .

Ответ №1:

Вам не удалось получить токен доступа версии 2.0 из ресурса https://database.windows.net , версия токена определяется ресурсом, а не клиентом.

Токены доступа создаются на основе audience токена, в вашем случае https://database.windows.net , связанного с ним корпоративного приложения, Azure SQL Database который Application ID является 022907d3-0f1b-48f7-badc-1ba6abab6d66 ресурсом, для которого ваш клиент запрашивает токен accessTokenAcceptedVersion , null если значение равно null , этот параметр по умолчанию 1 равен, это означает, что вы можете просто получить токен версии v1.0 изэтот ресурс, независимо от версии v1.0 или версии v2.0, который вы использовали в полномочиях.

См. — https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens

введите описание изображения здесь

Комментарии:

1. Итак, я еще немного покопался и теперь понимаю, что проблема не в версии токена. К этому это не имеет никакого отношения. Я использовал быстрый запуск из службы приложений Azure, когда я создал службу приложений и включил аутентификацию для входа в Azure Active Directory. Это успешно принудительно выполняет аутентификацию, но теперь я подозреваю, что, когда я использую приведенный выше код для получения токена доступа, он генерирует новый и не использует аутентифицированного пользователя при входе в систему. Если бы я был игроком, я бы сказал, что он, вероятно, использует анонимного пользователя.

2. Я знаю, что проблема не в пользователе, которого я использую для входа в систему. Это учетная запись администратора для всего. В БД есть логин и пользователь, связанные с ним в БД, и я включил делегирование Azure SQL для приложения при регистрации приложения в Azure AD.

3. Я думал, что, поскольку я изначально аутентифицировался с помощью аутентификации V2 (это то, что создает quick start), мне понадобится токен доступа V2, и это было то, что, как я думал, сбило меня с толку. Ошибка, которую я пытаюсь исправить, заключается в том, что «Не удалось войти в систему для пользователя «<участник, идентифицированный токеном>»», когда я использую токен для подключения к базе данных Azure. Я думал, что проблема связана с версией токена, но теперь я почти уверен, что я лаю не на то дерево. Я думаю, что проблема связана с подписью пользователя на токене, который я получаю.