#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) и выполнить запрос токена с кодом авторизации.