Ошибка AADTS900561 в MSAL-браузере: конечная точка принимает только запросы POST и OPTIONS, но не GET — невозможно получить токен
Я пытаюсь получить токен в React, используя MSAL-браузер. С помощью следующего кода я сталкиваюсь со следующей ошибкой при достижении «await this.publicClientApplication.loginPopup»: «AADSTS900561: конечная точка принимает только запросы POST, OPTIONS. Получен запрос GET». К сожалению, мне не удалось найти много информации по этой конкретной проблеме.
Моя проблема в том, что я не могу получить ответ на запрос токена. Чтобы запросить токен, мне нужен, помимо прочего, «код». Есть ли у кого-нибудь идеи о том, что может быть причиной этой проблемы?
Я также попытался настроить HTTP-сервер для обработки ответа от MSAL. Однако, как только я вхожу в систему, URL-адрес «http://localhost:65192/#code=long_code_text_here&client_info=long_client_id_here&session_state=some_session_state_here&» отправляется на HTTP-сервер, а с символом «#» ничего не получено. Это мешает мне даже обработать «код». Как видно из кода, я установил для параметра «response_mode» значение «query», чтобы использовать «?» вместо «#», но похоже, что для MSAL-Browser или, в частности, для loginPopup и loginRedirect, «response_mode = фрагмент» является статическим. Есть идеи?
Изменить: у меня нет доступа к Azure AD, но у меня уже есть решение Python, работающее локально на моем компьютере и получающее токен.
import React, { Component } from 'react';
import './App.css';
import SelectionManager from "./SelectionManager";
import {config} from "./Config";
import {PublicClientApplication} from "@azure/msal-browser";
class App extends Component {
constructor(props) {
super(props);
this.state = {
error: null,
isAuthenticated: false,
user: {},
};
this.login = this.login.bind(this);
// Initialize the MSAL application object
this.publicClientApplication = new PublicClientApplication({
auth: {
clientId: config.clientId,
redirectUri: config.redirectUri,
authority: config.authority,
response_type: config.response_type,
response_mode: "query"
},
cache: {
cacheLocation: "sessionStorage",
storeAuthStateInCookie: false
}
});
this.publicClientApplication.initialize();
console.log("initialized");
}
async login() {
console.log("logging in");
try {
console.log("try to open popup");
const response = await this.publicClientApplication.loginPopup({
scopes: config.scopes,
prompt: "select_account"
});
console.log("popup may have been opened");
this.setState({ isAuthenticated: true });
}
catch (err) {
this.setState({
isAuthenticated: false,
user: {},
error: err
});
}
}
render() {
return (
<div className="App">
{this.state.isAuthenticated ? <p>
<SelectionManager/>
</p>:
<p>
<button onClick={() => this.login()}> Login</button>
</p>
}
</div>
);
}
}
export default App;