Oauth в Azure AD в расширении Chrome с использованием chrome.identity?

Мне нужна помощь, чтобы понять, как реализовать вход в систему по лазурному протоколу oauth на моем Chrome Webextension. Я нашел здесь очень полезное предложение на SO by @Rinor, как использовать user.identity с аутентификацией Azure, и я думаю, что я на полпути к успеху.

Используя приведенный ниже код, я получаю всплывающее окно входа в систему, и я могу легко войти в систему с именем пользователя и паролем. В ответ от Azure я получаю URL-адрес, содержащий токен, затем экстрагирую токен с помощью регулярного выражения и сохраняю его в crhorme.storage.

Проблема в том, что я застрял. Как мне теперь продолжить, чтобы получить данные пользователя (на самом деле мне нужен только адрес электронной почты или имя пользователя). Я не понимаю, нужен ли мне еще один вызов ajax для /oauth2/v2.0/token, чтобы получить дополнительный токен ... и если да, то как мне передать токен, который я получил от первоначального вызова, в / oauth2 / v2. 0 / авторизовать.

Кто-нибудь знает, как действовать? Любая помощь будет более чем приветствоваться ????

Заранее большое спасибо

chrome.identity.launchWebAuthFlow(
  {
    url: 'https://login.microsoftonline.com/' + tenant_id + '/oauth2/v2.0/authorize?' + // <= here tenant id or just common
      'response_type=token' +
      '&response_mode=fragment' +
      '&prompt=login' +
      '&client_id=' + client_id + // <= here client id from azure console
      '&redirect_uri=' + redirectUrl +
      '&scope=openid https://management.azure.com/user_impersonation profile',
    interactive: true
  },
  function (responseWithToken) {
    // the access token needs to be extracted from the response.
    console.log(responseWithToken);

    let token = responseWithToken.match(/(?<=access_token=).*(?=&token_type)/);
    chrome.storage.local.set({ "azure_token": token }, function () {
      console.log('Value is set');
    });
  }
);

// What next? :S

person Mauro    schedule 23.07.2020    source источник


Ответы (1)


Если вы хотите получить имя пользователя, вы можете декодировать access_token, что является ответом после входа пользователя в систему. И upn в утверждениях - это имя пользователя, возможно, номер телефона, адрес электронной почты или неформатированная строка.

Дополнительные сведения о токене доступа см. здесь.

person Pamela Peng    schedule 28.07.2020
comment
Большое спасибо. Тем временем мне удалось настроить неявный поток грантов с помощью chrome.identity.launchWebAuthFlow, и он работает как шарм. Я получаю токен в URL-адресе обратного вызова и извлекаю его с помощью регулярного выражения. Затем я использую его в заголовках ajax для вызова API, и он работает. Я все еще не понимаю, как его обновить до истечения срока ... - person Mauro; 28.07.2020
comment
Привет, @Mauro, вы все еще ищете помощь по этому поводу - person Raghavendra beldona; 25.08.2020
comment
Привет, @ Raghavendra-MSFTIdentity, спасибо за ваше сообщение. Я бы сказал, что теперь я уверен в самом потоке, я успешно использую его с Azure и другими поставщиками, однако я изо всех сил пытаюсь понять, где хранятся учетные данные. Это настоящая загадка. когда я устанавливаю расширение, запускается поток, затем я вставляю учетные данные и получаю действительный токен в URL-адресе перенаправления. Когда затем я снова запускаю поток для получения нового токена, я получаю действительный токен без запроса учетных данных вообще, и в chrome: // identity-internals ничего не хранится. - person Mauro; 25.08.2020
comment
Как видно из документа, Chrome имеет кеш доступа в памяти токены до истечения срока действия токена / смены пароля вы можете получить новый токен без подтверждения учетных данных - person Raghavendra beldona; 26.08.2020
comment
Нет, к сожалению, это неправда. Кеш в памяти работает только для токенов Google, полученных через getAuthToken. Токен, полученный от сторонних властей через launchWebAuthFlow, не хранится в chrome: //identity-internals... но в то же время учетные данные где-то хранятся, вопрос в том, где ... - person Mauro; 31.08.2020