#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. Я думал, что проблема связана с версией токена, но теперь я почти уверен, что я лаю не на то дерево. Я думаю, что проблема связана с подписью пользователя на токене, который я получаю.