Поток кода Azure OAuth2 - в токене доступа нет заявлений о группах (и также нет хэш-групп)

Я использую поток кода OAuth2 и пытаюсь вернуть группы пользователей в свой токен доступа. Все, что я читаю, говорит, что я должен видеть либо утверждение групп, либо утверждение hasgroups, но я не вижу ни того, ни другого.

Я изменил следующие поля в манифесте регистрации приложения для моего клиентского приложения:

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [
            {
                "name": "groups",
                "source": null,
                "essential": false,
                "additionalProperties": [
                    "dns_domain_and_sam_account_name"
                ]
            }
        ],
        "saml2Token": []
    },

Вот пример моей строки запроса для URL-адреса перенаправления входа (login.microsoftonline.com) ...

client_id=<clientId>
&response_type=code
&redirect_uri=<redirectUri>
&response_mode=query
&scope=<appScope>%20offline_access
&state=67890

Вот пример моей строки запроса для моего запроса токена с использованием authCode (login.microsoftonline.com/{tenantId}/oauth2/v2.0/token)

client_id=<clientId>
&scope=<uriEncodedScopes>%20offline_access
&redirect_uri=<uriEncodedRedirectUri>
&code=<authCode>
&client_secret=<uriEncodedClientSecret>
&grant_type=authorization_code

Все работает отлично, но я не могу понять, как вернуть информацию о группах в свой токен.

ОБНОВЛЕНИЕ

Я добавил% 20openid в свою область видимости в обоих URL-адресах, и теперь я получаю id_token, но я все еще не вижу «группы» или «hasgroups» ни в одном из токенов.

ОБНОВЛЕНИЕ

Я только что добавил те же изменения манифеста (groupMembership, optionalClaims) в свою регистрацию приложения API (вместо моего клиента) - API, который раскрывает область действия, и я не вижу никаких изменений. Маркер доступа и идентификатор идентификатора вообще не имеют ссылки на группы.


person Tim Hardy    schedule 09.01.2020    source источник


Ответы (1)


Согласно моему тесту, он должен работать. И вам просто нужно настроить groupMembershipClaims, optionalClaims в вашей регистрации приложения API, обратитесь к причина ниже.

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

Вы можете сослаться на мой тестовый образец ниже, я пробовал использовать рабочую или личную учетную запись, оба работают.

Запросите код авторизации (api://3e013fde-xxxxxxa422f3/User.Test - это мое разрешение API):

https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize?
client_id=xxxxxxxxxxxxxxx
&response_type=code
&redirect_uri=https://localhost
&response_mode=query
&scope=openid offline_access api://3e013fde-xxxxxxa422f3/User.Test
&state=12345

Запросить токен:

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

Расшифруйте токен в https://jwt.io/, заявка groups включена.

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


Примечание.

Мое клиентское приложение и приложение API созданы сегодня, я полагаю, есть некоторые различия между приложением, созданным в old App Registration(it is not existing in the portal currently), app registration portal(it has been moved to the new App Registrations), new App Registration(theApp Registrationin portal currently).

И из этого документа :

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

Во время моего теста также есть странная вещь: когда я создаю новую регистрацию приложения API, просто устанавливаю "groupMembershipClaims": "SecurityGroup" без настройки optionalClaims, манифест будет таким, как показано ниже.

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [],
        "saml2Token": []
    }

Тогда Access token не будет включать groups, ID token будет иметь groups.

Если я установлю его с вашим, Access token будет иметь groups.

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [
            {
                "name": "groups",
                "source": null,
                "essential": false,
                "additionalProperties": [
                    "dns_domain_and_sam_account_name"
                ]
            }
        ],
        "saml2Token": []
    }

Но когда я установил его, вернусь к

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [],
        "saml2Token": []
    }

Access token по-прежнему имеет groups.

На портале - Token configuration (preview) и в этом документе - Configure group claims for applications with Azure Active Directory (Public Preview): функция должна быть в предварительном просмотре, это может быть ошибкой (я не уверен).

В заключение я рекомендую вам попробовать два новых приложения.

person Joy Wang    schedule 10.01.2020
comment
Спасибо за ваш ответ. Я не могу попробовать это сейчас, потому что мне нужен мой администратор, чтобы увеличить лимит расходов на эту тестовую учетную запись, но пока - каков ваш уровень Azure AD? Я использовал стандартную (бесплатную) версию. Нужно ли мне обновляться до Премиум-версии AD? Мне любопытно, нужно ли мне настроить пользователей и группы в моем клиентском приложении, чтобы добавить туда свои группы. - person Tim Hardy; 13.01.2020
comment
@TimHardy Я также использую бесплатную версию AAD. И я думаю, что нет необходимости добавлять свои группы в SP (корпоративное приложение) - ›Users and Groups, просто убедитесь, что Свойства -› Требуется назначение пользователя - ›No. Лучший способ проверить мое решение - создать два новых приложения, потому что есть ошибка, которую я не могу воспроизвести. - person Joy Wang; 14.01.2020
comment
Наконец-то я смог снова подключить свою рабочую область Azure. После повторного создания регистрации приложения api я начал видеть группы в своих токенах. Спасибо за помощь. - person Tim Hardy; 11.02.2020