React-add-msal getAccessToken не может загрузить из кэша - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь использовать ответ-аад-мсал. Все работает хорошо (я могу получить свой токен с Azure), пока не попытаюсь получить его из кэша. Когда я использую метод getAccessToken (), страница перезагружается снова и снова. Кажется, msal не может загрузить токен из кеша. Я попробовал эти решения ( Приложение не получает токен доступа из кэша с использованием MSAL (реагировать-aad-msal) ), но это не сработало. Есть идеи?

Вот мой конфиг:

import jwt from 'jwt-decode'
import { MsalAuthProvider, LoginType } from 'react-aad-msal';

// Msal Configurations
const config: any = {
  auth: {
    authority: 'https://login.microsoftonline.com/<tenantID>',
    clientId: '<frontEndClientID>',
    redirectUri: 'http://localhost:3000/signin-oidc'
  },
  cache: {
    cacheLocation: "localStorage",
    storeAuthStateInCookie: false
  }
};

// Authentication Parameters
const authenticationParameters = {
  scopes: [
    "https://graph.microsoft.com/User.Read",
    "api://<backEndAPIClientID>/Room.ReadWrite"
  ]
}

// Options
const options = {
  loginType: LoginType.Redirect,
  tokenRefreshUri: window.location.origin + '/auth.html'
}

export const authProvider = new MsalAuthProvider(config, authenticationParameters, options)

export const authenticateRequest = async (headers: any) => {
  // Get the authentication token 
  const token = await authProvider.getAccessToken();
  console.log(jwt(token.accessToken));
  return {
    headers: {
      ...headers,
      authorization: token.accessToken ? `Bearer ${token.accessToken}` : "",
    }
  } 
};

А вот мой запрос:

export async function getAllRooms(options: object) {
    let queryOptions = "?";
    Object.entries(options).forEach(
    ([key, value]) => {
    queryOptions = queryOptions.concat(key).concat("=").concat(value).concat("&");
        } 
    );
    return axios.get(endpoint + queryOptions, await authenticateRequest({}))
    .then(response => {
        ...
    })
    .catch(err => {
        throw err
    })
}

1 Ответ

0 голосов
/ 31 марта 2020

Мне наконец удалось заставить это работать. В моем authProvider.getAccessToken () я запрашивал 2 области из 2 разных API, и кажется, что AzureAD это не нравится. Я удалил один и вуаля.

Мне все еще интересно, почему, хотя. Возможно, неправильная конфигурация где-то в Azure.

...