Встроить PowerBI в приложение, аутентифицированное с помощью Azure AD v2 - PullRequest
0 голосов
/ 04 декабря 2018

Я создаю веб-приложение, которое использует Azure AD для входа в систему и хочет встроить PowerBI в клиент, написанный на React.

У меня есть простое экспресс-приложение, использующее node-openid-client и passport для аутентификации в конечной точке Azure AD v2.Это затем выдает приложение реакции, а затем мы перенаправляем его клиенту.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить 1 токен, который имеет разрешения как для моего приложения, так и для Power BI.Когда я добавляю разрешения Power BI в свои заявки, он даже меняет аудиторию токена с моего приложения на PowerBI (00000009-0000-0000-c000-000000000000), поэтому он не проверяется.

Яиспользуя этот пакет в клиенте: https://www.npmjs.com/package/react-powerbi

Можно ли каким-либо образом получить токен, который охватывает все разрешения в моем приложении Azure AD для использования на клиенте?

Соответствующий код:

Issuer.discover(`https://login.microsoftonline.com/${TENANT_ID}/v2.0`)
.then(async adIssuer => {
  const eidClient = new adIssuer.Client({
    redirect_uri: REDIRECT_URI,
    client_id: CLIENT_ID,
    client_secret: CLIENT_SECRET,
    token_endpoint_auth_method: "client_secret_basic"
  });

  passport.use(
    "oidc",
    new Strategy(
      {
        client: microsoftClient,
        params: {
          client_id: CLIENT_ID,
          redirect_uri: REDIRECT_URI,
          scope: "openid",
          response_type: "code",
          response_mode: "query",
          state: "testing",
          nonce: 10000
        }
      },
      (tokenset, user, done) => {
        done(null, {
          access_token: tokenset.access_token,
          id_token: tokenset.id_token,
          expires_at: tokenset.expires_at,
          id: tokenset.sub,
          ...user
        });
      }
    )
  );
})
.catch(e => console.error(e));


app
.get("/auth", passport.authenticate("oidc"))
.get(
  "/auth/cb",
  passport.authenticate("oidc", {
    successRedirect: "/",
    failureRedirect: "/login"
  }),
  (req, res) => {
    res.status(401).send("Login");
  }
)

Если чего-то не хватает, просто спросите, и я добавлю его

...