Я полностью следую примеру из Пример для Angular 16 из MSAL Git. Код точно такой же, как в примере, за исключением идентификатора клиента и полномочий. Когда я вошел в свою учетную запись, я получил ответ об ошибке 401. Я также не знаю, как декодировать зашифрованный код в URL. Это потому, что моя учетная запись не имеет доступа к приложению в Azure AD и как я могу расшифровать URL-адрес? URL-адрес имеет вид localhost:5069/api#code=xxx&client_info=xxx&state=xxx&session_state=xxx и содержит 4 части: код, client_info,state и session_state. Как я могу извлечь из них информацию?
Ошибка 401 обычно возникает, если приложению Microsoft Entra ID не предоставлены необходимые разрешения API для выполнения операции.
Я создал мультитенантное приложение Microsoft Entra ID:
Зарегистрированный URL-адрес перенаправления:
Предоставьте User.Read
делегированное разрешение API при вызове /me
конечной точки:
Теперь в файле среды замените свой идентификатор клиента:
export const environment = {
production: false,
msalConfig: {
auth: {
clientId: 'YourClientID',
authority: 'https://login.microsoftonline.com/common'
}
},
apiConfig: {
scopes: ['user.read'],
uri: 'https://graph.microsoft.com/v1.0/me'
}
};
Когда я запускал образец, я вошел в систему с помощью Popup:
Пользователь успешно авторизовался:
Удалось успешно получить данные профиля вошедшего в систему пользователя:
Чтобы устранить эту ошибку, обязательно предоставьте необходимые разрешения API приложению Microsoft Entra ID.
Если проблема не устранена, проверьте, передаете ли вы действительный ClientID.
Ссылка:
Вы используете два приложения?
нет, я использую только одно веб-приложение. Порт 5069 используется внутренним веб-API.
Хорошо, возможно, это вызывает проблему
Я знаю, где я сделал ошибку. Я установил URI перенаправления на localhost:5069, который предоставляется серверной частью. Но это меня смущает. Когда нам следует использовать внешний порт, а когда — внутренний порт?