Ошибка 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;

0 ответов

Другие вопросы по тегам