Microsoft OAuth. Как после входа в систему получить адрес электронной почты и отображаемое имя пользователя?

Я добавляю аутентификацию Microsoft в Firebase. Я могу успешно войти в систему, но мне нужен адрес электронной почты и отображаемое имя пользователя. Как я могу получить это? Пока что это то, что у меня есть.

      export function* signInWithMicrosoft() {
  yield microsoftProvider.setCustomParameters({
    prompt: 'consent',
    tenant: 'consumers',
  });
  const res = yield signInWithPopup(auth, microsoftProvider);

  try {
    const credential = yield OAuthProvider.credentialFromResult(res);
    const { accessToken, idToken } = credential;

    yield console.log(credential);
  } catch (err) {
    return err;
  }
}

1 ответ

Вы можете использовать Microsoft Graph API, чтобы получить адрес электронной почты и отображаемое имя вошедшего в систему пользователя, выполнив следующий запрос:

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

Чтобы выполнить приведенный выше запрос, вам необходимо добавить User.Readразрешение в вашем приложении Azure AD, как показано ниже:

Поскольку у вас уже есть токен доступа , просто измените свой код для запуска.запрос, как показано ниже:

      export function* signInWithMicrosoft() {
  yield microsoftProvider.setCustomParameters({
    prompt: 'consent',
    tenant: 'consumers',
  });
  const res = yield signInWithPopup(auth, microsoftProvider);

  try {
    const credential = yield OAuthProvider.credentialFromResult(res);
    const { accessToken, idToken } = credential;

    const response = yield fetch('https://graph.microsoft.com/v1.0/me', {
      headers: {
        Authorization: `Bearer ${accessToken}`,
      },
    });
    const data = yield response.json();
    const { displayName, mail } = data;

    yield console.log(displayName, mail);
  } catch (err) {
    return err;
  }
}

Вы также можете декодировать токен доступа, вставив его в jwt.ms и проверив scpзаявить о разрешениях, которые он имеет:

Когда я побежал то же самое GETзапрос в Postman, включив токен на предъявителя, я успешно получил ответ с адресом электронной почты вошедшего в систему пользователя и отображаемым именем, как показано ниже:

      GET https://graph.microsoft.com/v1.0/me
Authorization: Bearer <token>

Ответ: