Как получить идентификатор организации (арендатора) из профиля пользователя с помощью Microsoft Graph API - PullRequest
0 голосов
/ 18 мая 2018

Я создаю надстройку для продажи с использованием организационных лицензий.

Я реализовал схему аутентификации в надстройке.В настоящее время я запрашиваю область действия User.Read для проверки подлинности с использованием конечной точки Azure v2.Чтобы получить информацию о пользователе, я запрашиваю

https://graph.microsoft.com/v1.0/me

Чтобы правильно проверить лицензию пользователя, мне нужно извлечь идентификацию организации пользователя.Тем не менее, пользовательская информация, которую я получаю из запроса Grah, невероятно скудна.Для учетной записи AAD схема выглядит примерно так:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
  businessPhones: [],
  displayName: "FirstName LastName",
  givenName: "FirstName",
  id: "unique-id",
  jobTitle: null,
  mail: "First.LastName@COMPANYDOMAIN.COM",
  mobilePhone: null,
  officeLocation: null,
  preferredLanguage: null,
  surname: "LastName",
  userPrincipalName: "FILastName@COMPANYDOMAIN.COM"
}

Если я использую

https://graph.microsoft.com/BETA/me

, я получаю больше информации, но ничто не помогает мне определить уникальный идентификатор организации пользователя..

Есть ли другая область, которую мне нужно использовать для получения информации об организации пользователя?А если нет, могу ли я рассчитывать на разбор доменного имени из электронной почты пользователя как уникального идентификатора организации пользователя?Нужно ли запрашивать другой API?

Обновление: ответ OAuth

В случае, если это помогает, после аутентификации пользователя с помощью AD я получаю следующий ответ:

{
    access_token: "eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFEWDhHQ2k2SnM2U0s4MlRzRDJQYjdyN1VLTzdJSDJSLWpTcmpScU9..."
    expires_at: Fri May 18 2018 07: 18: 42 GMT - 0400(Eastern Daylight Time) {}
    expires_in: "3599"
    provider: "Microsoft"
    scope: "https://graph.microsoft.com/User.Read"
    session_state: "012f4565-31bb-..."
    state: "259309..."
    token_type: "Bearer"
}

Обновление: полный ответ AD с использованием https://graph.microsoft.com/BETA/me

{
    @odata.context: "https://graph.microsoft.com/beta/$metadata#users/$entity",
        accountEnabled: true,
        ageGroup: null,
        assignedLicenses: [],
        assignedPlans: [],
        businessPhones: [],
        city: null,
        companyName: null,
        consentProvidedForMinor: null,
        country: null,
        deletedDateTime: null,
        department: null,
        deviceKeys: [],
        displayName: "FirstName LastName",
        employeeId: null,
        givenName: "FirstName",
        id: "ebdcf715-43c5-4f48-ad0d-b798a3330849",
        imAddresses: [],
        jobTitle: null,
        legalAgeGroupClassification: null,
        mail: "FirstName.LastName@COMPANYDOMAIN.COM",
        mailNickname: "FirstName.LastName",
        mobilePhone: null,
        officeLocation: null,
        onPremisesDomainName: "COMPANYDOMAIN.COM",
        onPremisesExtensionAttributes: {
            …
        },
        onPremisesImmutableId: "...RVWAty...",
        onPremisesLastSyncDateTime: "2018-05-10T18:13:45Z",
        onPremisesProvisioningErrors: [],
        onPremisesSamAccountName: "FILastName",
        onPremisesSecurityIdentifier: "...-21-1412366426-...",
        onPremisesSyncEnabled: true,
        onPremisesUserPrincipalName: "FILastName@COMPANYDOMAIN.COM",
        passwordPolicies: "DisablePasswordExpiration",
        passwordProfile: null,
        postalCode: null,
        preferredDataLocation: null,
        preferredLanguage: null,
        provisionedPlans: [],
        proxyAddresses: [],
        refreshTokensValidFromDateTime: "2018-05-10T17:54:45Z",
        showInAddressList: null,
        state: null,
        streetAddress: null,
        surname: "LastName",
        usageLocation: "US",
        userPrincipalName: "FILastName@COMPANYDOMAIN.COM",
        userType: "Member"
}

Обновление: декодирование access_token с использованием jwt.ms

{
  "typ": "",
  "nonce": "",
  "alg": "",
  "x5t": "",
  "kid": "iBjL1Rcqzhiy4fpxIxdZqohM2Yk"
}.{
  "aud": "",
  "iss": "",
  "iat": "",
  "nbf": "",
  "exp": "",
  "acr": "",
  "aio": "",
  "amr": [
    "pwd"
  ],
  "app_displayname": "",
  "appid": "",
  "appidacr": "",
  "family_name": "",
  "given_name": "",
  "ipaddr": "",
  "name": "",
  "oid": "",
  "onprem_sid": "",
  "platf": "",
  "puid": "",
  "scp": "",
  "sub": "",
  "tid": "",
  "unique_name": "",
  "upn": "",
  "uti": "",
  "ver": "1.0"
}.[Signature]

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Теперь это может не использовать графическое API напрямую, но делает чрезвычайно простым получение идентификатора клиента организации.Просто сделайте GET для "https://login.microsoftonline.com/{yourdomainname}/.well-known/openid-configuration". Возвращенная структура будет иметь идентификатор арендатора. Попробуйте этот URL, например, в вашем браузере: https://login.microsoftonline.com/microsoft.com/.well-known/openid-configuration.

0 голосов
/ 18 мая 2018

Если больше ничего не работает, вы можете декодировать токен доступа и получить утверждение tid.Это идентификатор клиента Azure AD.

Документацию по заявкам в токенах можно найти здесь: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-token-and-claims

Например, вот что написано для tid:

Неизменяемый одноразовый идентификатор, который идентифицирует владельца каталога, выдавшего токен.Это значение можно использовать для доступа к специфичным для арендатора ресурсам каталога в мультитенантном приложении.Например, вы можете использовать это значение для идентификации клиента в вызове Graph API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...