Почему в утверждениях групп маркера доступа AAD я получаю GUID, который не является objectId какой-либо группы в клиенте AAD? - PullRequest
2 голосов
/ 19 мая 2019

Используя измененную версию быстрого запуска 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);
                    });
                }
            });
        }

1 Ответ

1 голос
/ 20 мая 2019

Вы также получите идентификаторы directoryRole в группах (полученные из токена доступа).Вы можете запросить https://graph.microsoft.com/v1.0/me/memberOf, чтобы проверить детали. Здесь - это обозреватель графиков.

enter image description here

...