Поток кода авторизации OAuth с помощью PKCE не запускает API /token для получения токена

#angular #azure #oauth-2.0 #msal

Вопрос:

У меня есть приложение Angular 11, которое хочет интегрироваться с Azure (с использованием MSAL), выполняет поток кода аутентификации OAuth с помощью PKCE. Однако я увидел, что мое приложение вызвало /authorize (вернуло 302), а затем перенаправило на http://localhost:8087/home#code=THE_RETURN_CODE from above . Тогда приложение больше ничего не делает и просто выдает мне пустую страницу. Я не вижу, чтобы кого-то /token звали. Вместо этого он остался в http://localhost:8087/home#code=....

Моя конфигурация:

 export function MSALInstanceFactory(): IPublicClientApplication {
      return new PublicClientApplication({
        auth: {
          clientId: CLIENT_ID,
          authority: 'https://login.microsoftonline.com/TENANT_ID',
          redirectUri: 'http://localhost:8087/home',
          postLogoutRedirectUri: 'http://localhost:8087/home',
          navigateToLoginRequestUrl: true
        },
        cache: {
          // cacheLocation: BrowserCacheLocation.LocalStorage,
            cacheLocation: "sessionStorage",
          storeAuthStateInCookie: isIE, // set to true for IE 11. Remove this line to use Angular Universal
        },
        system: {
          loggerOptions: {
            loggerCallback,
            logLevel: LogLevel.Info,
            piiLoggingEnabled: false
          }
        }
      });
    }

 

Пустая страница:
введите описание изображения здесь

Комментарии:

1. Не могли бы вы, возможно, предоставить более подробную информацию? Каково ожидаемое/желаемое поведение? Где код, который должен это сделать? Было бы здорово создать минимальное репо для его воспроизведения, если это возможно.

2. привет @RJM Я ожидал, что API /token будет вызван автоматически, за которым последует /авторизация

3. Для этого может потребоваться немного больше деталей-мы видим аутентификацию config , но не какую-либо реализацию. Как, когда и где приложение впервые проверяет состояние аутентификации?

Ответ №1:

В потоке кода авторизации (раздел 4.1 RFC 6749) клиентское приложение должно выполнить 2 вызова API. Первый — это запрос на авторизацию (раздел 4.1.1 RFC 6749) через веб-браузер. Второй — это запрос токена (раздел 4.1.3 RFC 6749). Конечная точка токена ( /token в вашем случае) не вызывается автоматически.

Программа, ожидающая на конечной точке перенаправления ( http://localhost:8087/home в вашем случае), должна получить выданный код авторизации ( THE_RETURN_CODE в вашем случае) из ответа на авторизацию (раздел 4.1.2 RFC 6749) и выполнить запрос токена с кодом авторизации.