Используя измененную версию быстрого запуска Microsoft MSAL для node.js (оригинал здесь ), я успешно получил токен доступа для API хранилища Azure, используя неявный поток.Маркер содержал заявку группы, но один из идентификаторов GUID в заявке, похоже, не коррелирует с какой-либо группой в клиенте.После удаления пользователя из каждой группы в заявке по-прежнему содержится этот GUID (и, как и ожидалось, больше нет):
"groups": [
"2cb3a5e8-4606-4407-9a97-616246393b5d"
],
Поиск в Google этого GUID не привел к каким-либо попаданиям, поэтому япредполагая, что это не какой-то известный GUID.
Почему я получаю этот "неизвестный" GUID в заявке группы?
Арендатор AAD - очень маленький, исключительноиспользуется мной для изучения AAD и аутентификации.Таким образом, он содержит только одну группу.Вовлеченный пользователь не является членом этой отдельной группы.
Я просматривал страницу пользователя на портале Azure, которая действительно показывает, что пользователь "не является членом какой-либо группы".Интерфейс командной строки Azure также показывает, что пользователь не является членом какой-либо группы:
$ az ad user get-member-groups --upn jurjen@stupendous.org
[]
$
Полный список групп в этом клиенте содержит только одну группу, и, как вы можете видеть, его ObjectID не соответствуетGUID Я получаю в претензии:
$ az ad group list --query [].objectId --output tsv
b1cc46de-8ce9-4395-9c7c-e4e90b3c0036
$
Я также создал еще одну регистрацию приложения и выставил на него фиктивный API.При использовании этого фиктивного API в качестве области действия я снова успешно получаю токен доступа, но он снова включает в себя тот же неизвестный GUID, что и в заявке для одной группы.
Вот, надеюсь, соответствующие биты кода.
Как уже упоминалось выше, сначала я получил токен доступа для хранилища Azure:
var requestObj = {
scopes: ["https://storage.azure.com/user_impersonation"]
};
... но я получил точно такой же результат с фиктивным API:
var requestObj = {
scopes: ["api://7c7f72e9-d63e-44b6-badb-dd0e43df4cb1/user_impersonation"]
};
Thisбит регистрирует пользователя:
function signIn() {
myMSALObj.loginPopup(requestObj).then(function (loginResponse) {
//Successful login
showWelcomeMessage();
acquireTokenPopup();
}).catch(function (error) {
//Please check the console for errors
console.log(error);
});
}
Токен получен здесь.Я знаю, что callMSGraph
не будет работать здесь, учитывая область действия токена.Я получаю токен из журнала консоли браузера и декодирую его с помощью jwt.ms.
function acquireTokenPopup() {
//Always start with acquireTokenSilent to obtain a token in the signed in user from cache
myMSALObj.acquireTokenSilent(requestObj).then(function (tokenResponse) {
console.log("Access Token from cache: " + JSON.stringify(tokenResponse.accessToken));
callMSGraph(graphConfig.graphMeEndpoint, tokenResponse.accessToken, graphAPICallback);
}).catch(function (error) {
console.log(error);
// Upon acquireTokenSilent failure (due to consent or interaction or login required ONLY)
// Call acquireTokenPopup(popup window)
if (requiresInteraction(error.errorCode)) {
myMSALObj.acquireTokenPopup(requestObj).then(function (tokenResponse) {
console.log("Access Token after interaction: " + JSON.stringify(tokenResponse.accessToken));
callMSGraph(graphConfig.graphMeEndpoint, tokenResponse.accessToken, graphAPICallback);
}).catch(function (error) {
console.log(error);
});
}
});
}