acquTokenSilent с angular и Microsoft msal завершается ошибкой с AADB2C90077 / AADB2C90205 - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь получить токен из конфигурации AAD B2 C, используя angular9 и microsoft / msal

Моя конфигурация модуля выглядит следующим образом;

MsalModule.forRoot(
            {
                auth: {
                    clientId: "xxxxxxxxxxxxxxxxx",
                    authority:
                        "https://login.microsoftonline.com/tfp/isthereanynewscodeblast.onmicrosoft.com/B2C_1_itansignup",
                    validateAuthority: false,
                },
                cache:{
                    cacheLocation:"localStorage",
                    storeAuthStateInCookie:true
                }
            }
        ),

Используется для входа в систему и это работает. Я могу получить основную c информацию, подобную этой: enter image description here

Затем, после входа в систему, я пытаюсь получить больше данных для графических данных или для моих пользовательских областей, например:

getToken() {
        const accessTokenRequest = {
             scopes: [
                 "https://graph.microsoft.com/User.Read",
            //     // "https://isthereanynewscodeblast.onmicrosoft.com/05cd7635-e6f4-47c9-a5ce-8ec04368b297/application_reader",
            //     // "https://isthereanynewscodeblast.onmicrosoft.com/05cd7635-e6f4-47c9-a5ce-8ec04368b297/application_writer",
             ],
            clientId: "xxxxxxxxxxxxxxxx",
            authority: "https://login.microsoftonline.com/tfp/isthereanynewscodeblast.onmicrosoft.com/B2C_1_itansignup",
            redirectUri: "http://localhost:4200",
            // postLogoutRedirectUri: 'http://localhost:4200/',
        };
        this.authService
            .acquireTokenSilent(accessTokenRequest)
            .then((res) => {
                console.log("acquireTokenPopup");
                this.token = res.accessToken;
                this.getUser();
            })
            .catch((e) => {
                console.log("acquireTokenPopup catch");
                console.log(e);
            });
    }

Не удается получить токен со следующей ошибкой:

InteractionRequiredAuthError: AADB2C90077: User does not have an existing session and request prompt parameter has a value of 'None'.

Понятия не имею, что я делаю не так или где искать ответы:

  • мои возможности выглядит solid (^ C ^ V - имена и ссылки)
  • Я попытался изменить поведение сеанса пользовательского потока на отключенное
  • Изменено acquireTokenPopup возвращает эту ошибку:

    ServerError: AADB2C90205: This application does not have sufficient permissions against this web resource to perform the operation.

1 Ответ

0 голосов
/ 11 апреля 2020

Во-первых, URL-адрес microsoftonline.com в B2 C устарел ( ссылка ). Вы должны использовать что-то вроде этого в качестве своего авторитета:

`https://${tenant}.b2clogin.com/${tenant}.onmicrosoft.com/${policyId}`

Кроме того, в настоящее время невозможно получить доступ к MS Graph API от имени пользователя B2 C. Поэтому не следует указывать области действия MS Graph API. Вы должны иметь возможность указать область действия для API, который вы зарегистрировали как приложение B2 C:

app.acquireTokenSilent({ scopes: ['api-client-id/ScopeName'] });

Или, если вы хотите токен id, вы можете указать идентификатор клиента:

app.acquireTokenSilent({ scopes: [clientId] });
...