Как выдать себя за пользователя другого приложения Azure AD?

У меня есть два разных приложения для регистрации в Azure AD, и я хочу, чтобы приложение 2 могло олицетворять пользователя приложения 1. Мои 2 приложения принадлежат одному и тому же арендатору. Я добавил в разрешения приложения 2 область user_impersonation (см. Рисунок).

Затем я создал экспресс-сервер с паспортом, чтобы реализовать oauth.

const app = express()

passport.use("my-strategy", new MicrosoftStrategy({
  clientID: "my-client-id",
  clientSecret: "my-client-secret",
  callbackURL: "http://localhost:3000/auth/microsoft/callback",
  tenant: "my-tenant-id",
}, function (accessToken: string, refreshToken: string, params: any, profile: any, done: any) {
  try {
    let user = {
      accessToken: accessToken,
      refreshToken: refreshToken,
    }

    console.info(user);
  } catch (error) {
    console.info('error on login');
    console.info(error)

    return done(error)
  }
}));

app.use(passport.initialize());

app.get('/', (req, res) => {
  res.send("Express Server")
});

app.get('/auth/microsoft/login',
  passport.authenticate('my-strategy'));

app.get('/auth/microsoft/callback',
  passport.authenticate('my-strategy', { failureRedirect: '/failure' }),
  function (req, res) {
    res.redirect('/success');
  });

app.get("/success", (req, res) => {
  res.send("Success");
});

app.get("/failure", (req, res) => {
  res.send("Failure");
});

app.listen(3000, () => {
  console.info("Server running on 3000");
})

Пока нет проблем, я могу сделать запрос и получить токен доступа и токен обновления. Глядя на содержимое токена доступа, у меня есть область «user_impersonation».

Проблема возникает при использовании этого токена. Я не могу получить доступ к приложению 1 с этим токеном.

Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Освоение принципов SOLID в JavaScript: Пошаговое руководство
Освоение принципов SOLID в JavaScript: Пошаговое руководство
Принцип единой ответственности (SRP): класс должен иметь только одну причину для изменения. Другими словами, у него должна быть только одна...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
0
0
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался воспроизвести то же самое в своей среде и успешно получил результаты, как показано ниже:

Я зарегистрировал два приложения Azure AD app1 и app2.

В app1 я открыл API и добавил область действия, как показано ниже:

Теперь в app2 добавьте разрешение API, как показано ниже:

Перейдите в Azure Active Directory -> Регистрация приложений -> app2 -> Разрешения API -> Добавить разрешение -> Мои API -> app1

И предоставьте согласие администратора на разрешения API.

Теперь я сгенерировал токен для app2 для доступа к app1 с помощью Postman, используя следующие параметры:

GET https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:app2ClientID
client_secret:app2clientsecret
grant_type:authorization_code
scope:api://App1clientID/user_impersonation
redirect_uri:redirect_uri
code:code

Токен доступа был успешно сгенерирован с помощью api://***/user_impersonation, как показано ниже:

Когда я расшифровал токен, aud — это api://app1ClientId, а scp — это user_impersonation, как показано ниже:

Можете ли вы сейчас получить доступ к app1 с этим токеном?

Madfish 29.11.2022 10:46

Да, я могу получить доступ к app1 с помощью сгенерированного выше токена.

Rukmini 29.11.2022 10:48

Хорошо, у меня, вероятно, проблема с конфигурацией AD, спасибо за вашу помощь.

Madfish 29.11.2022 11:33

Другие вопросы по теме