#node.js #azure-active-directory
#node.js #azure-active-directory
Вопрос:
Я использую библиотеку @azure / ms-rest-nodeauth для интерактивного входа в систему (https://github.com/Azure/ms-rest-nodeauth/blob/master/lib/login.ts#L428 ) из командной строки для выполнения потока входа в систему устройства — https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code#protocol-diagram . Как видно из документа, вход в систему включает вызов конечной точки / deviceCode с идентификатором клиента и областью действия в качестве входных данных. Однако при входе в библиотеку @azure / ms-rest-nodeAuth не предусмотрена отправка области во время входа в систему, что не позволяет пользователю давать согласие на области.
Вот код, который я попробовал
const creds = await interactiveLogin({domain: "89d3889c-03f7-4b95-922c-393eefc1b12c",
tokenAudience: "5cf9ab4d-05af-4bc0-b7f9-6e4b0c236706"});
const token = await creds.getToken();
console.log(token);
Это ошибка, которую я получаю при входе в систему. Я не получил никакого экрана согласия.
AADSTS650057: Invalid resource. The client has requested access to a resource which is not listed in the requested permissions in the client's application registration. Client app ID: 04b07795-8ddb-461a-bbee-02f9e1bf7b46(Microsoft Azure CLI). Resource value from request: 5cf9ab4d-05af-4bc0-b7f9-6e4b0c236706. Resource app ID: 5cf9ab4d-05af-4bc0-b7f9-6e4b0c236706. List of valid resources from app registration: .
Я также пытался
const creds = await interactiveLogin({domain: "89d3889c-03f7-4b95-922c-393eefc1b12c",
tokenAudience: "api://5cf9ab4d-05af-4bc0-b7f9-6e4b0c236706/.default"});
const token = await creds.getToken();
console.log(token);
Я получил
Sorry, but we’re having trouble signing you in.
AADSTS500011: The resource principal named api://5cf9ab4d-05af-4bc0-b7f9-6e4b0c236706/.default was not found in the tenant named 89d3889c-03f7-4b95-922c-393eefc1b12c. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.
Комментарии:
1. пожалуйста, установите tokenAudience как
api://5cf9ab4d-05af-4bc0-b7f9-6e4b0c236706/
2. Не работает. AADSTS500011: Участник ресурса с именем api://5cf9ab4d-05af-4bc0-b7f9-6e4b0c236706/ не был найден в клиенте с именем 89d3889c-03f7-4b95-922c-393eefc1b12c. Это может произойти, если приложение не было установлено администратором клиента или с согласия любого пользователя в клиенте. Возможно, вы отправили запрос на проверку подлинности не тому клиенту.
3. Согласно ошибке, вы должны использовать admin use для входа в систему и получить согласие администратора
4. Я не определил для этого никакой области действия. Почему требуется согласие администратора?
5. Поскольку msal использует Azure AD endpoint версии0. Он поддерживает динамическую область действия.
Ответ №1:
Пакет @azure/ms-rest-nodeauth
использует конечную точку Azure AD версии 0 для выполнения аутентификации. Таким образом, у нас нет способа указать значение области действия, и мы просто можем указать значение ресурса. Для получения более подробной информации, пожалуйста, обратитесь к здесь. Что касается того, как ее предоставить, мы можем инициализировать tokenAudience
как значение ресурса в InteractiveLoginOptions
value.
Например
var msRestNodeAuth = require("@azure/ms-rest-nodeauth");
async function main() {
try {
const authres = await msRestNodeAuth.interactiveLoginWithAuthResponse({
clientId: "d8aa****-adbe-a1ad3c1dfd8d",
domain: "",
tokenAudience: "https://graph.microsoft.com/",
});
const token = await authres.credentials.getToken();
console.dir(token);
} catch (error) {}
}
main();
Комментарии:
1. но как получить согласие пользователя? Без согласия пользователя вход в систему завершается ошибкой.
2. @user3740951 Не могли бы вы, пожалуйста, предоставить сообщение об ошибке или скриншот?
3. @user3740951 Насколько я знал, если мы используем поток кода устройства для получения токена, нам нужно открыть браузер и ввести URL. Когда мы сделаем это, мы дадим согласие, если пользователи вашей организации не дадут согласия администратора.
4. @user3740951 У вас есть какие-либо другие проблемы?
5. Я добавил код и ошибки. Я не получаю экран согласия.