Ошибка токена доступа - Graph API получает профиль пользователя - PullRequest
0 голосов
/ 22 марта 2019

Я использую Microsoft graph API для входа в систему и получения профиля пользователя. У меня есть accessToken. Хотя я пытаюсь получить профиль пользователя, с которым я получил AccessToken.

Это мой код, я что-то здесь упускаю? Просто нужен профиль пользователя. Примечание: я использую Cors где угодно через прокси-сервер, который работал для получения кода и accessToken.

Спасибо за вашу помощь!

Я попытался добавить URL ресурса. Я попытался изменить заголовки (вам не нужны параметры тела для запросов GET и DEL).

let auth =
  "http://localhost:8080/https://graph.microsoft.com/v1.0/me?access_token=";
let client_id = "?client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
let redirect_uri = "&redirect_uri=http://localhost:8100/";
let response = "&response_type=code";
let resource = "&resource=https://graph.microsoft.com";
let scope =
  "&scope=openid+https://outlook.office.com/Contacts.read+offline_access";

let url =
  auth + token + resource + client_id + redirect_uri;

//let url = 'http://localhost:8080/https://graph.microsoft.com/v1.0/me?access_token=' + token +"&resource=https://graph.microsoft.com";
this.http.get(url, {
  headers: {
    Authorization: "Bearer " + token,
    "Content-Type": "application/x-www-form-urlencoded",
    "Access-Control-Allow-Origin": "*",
    resource: "https://graph.microsoft.com"
  }
});

Ожидается: взять AccessToken и получить профиль пользователя, как в Часть 4 здесь .

1 Ответ

1 голос
/ 23 марта 2019

У вас здесь происходит много вещей.

  1. Вы указываете свойства scope и resource. Они не принадлежат друг другу. Если вы используете конечную точку v1, тогда вы должны использовать resource, если вы используете конечную точку v2, то вы должны использовать scope. См. Области, а не ресурсы в документации.

  2. Ваш url неверен. Фактический URL должен выглядеть следующим образом для v1:

    https://login.microsoftonline.com/common/oauth2/authorize?client_id={id}&scope=https%3A%2F%2Fgraph.microsoft.com&redirect_uri={uri}&response_type=code
    

    или для v2, например:

    https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={id}&scope=openid+user.read+contacts.read+offline_access&redirect_uri={uri}&response_type=code
    
  3. Не могу использовать http.get() для этого. Предоставление кода авторизации OAuth начинается с , перенаправляя пользователя на этот URL. Затем он вернет code you затем POST обратно в конечную точку /token, чтобы получить access_token и refresh_token.

  4. Вам нужна область User.Read, чтобы получить профиль пользователя (или User.ReadBasic.All, чтобы получить профили других пользователей).

Я бы порекомендовал использовать конечную точку v2 и начать здесь:

...