Я использую приложение реагирования для вызова Azure API. Вот как это настроено:
import { BrowserAuthError, PublicClientApplication } from '@azure/msal-browser';
import { MsalProvider, useMsal, AuthenticatedTemplate, UnauthenticatedTemplate } from '@azure/msal-react';
import { msalConfig } from './authConfig';
const pca = new PublicClientApplication(msalConfig);
const { instance, accounts } = useMsal();
const loginRequest = {
scopes: ["User.Read"],
};
const response = await instance.acquireTokenPopup(loginRequest);
const accessToken = response.accessToken;
const fetchResponse = await fetch('https://management.azure.com/subscriptions/<subid>/resourceGroups/<rg>/providers/Microsoft.Network/frontDoors/<afd>?api-version=2021-06-01', {
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
const data = await fetchResponse.json();
Это то, что у меня есть в authConfig
const msalConfig = {
auth: {
clientId: <clientId>,
authority: `https://login.microsoftonline.com/<tenantId>`,
redirectUri: window.location.origin,
},
cache: {
cacheLocation: "sessionStorage",
storeAuthStateInCookie: false,
},
};
Я настроил следующие разрешения в приложении, а также создал субъект-службу и предоставил ему доступ участника к подписке. Я могу получить токен, используя этот код, но использование этого токена приводит к
{
"error": {
"code": "AuthenticationFailed",
"message": "Authentication failed."
}
}
Я пропустил какой-то шаг здесь?
При добавлении разрешений API управления службами Azure меня запрашивают одобрение администратора.
Это настройки корпоративных приложений:
пожалуйста, клонируйте приложение JavaScript,
Попробовал также добавить делегированное разрешение user_impersonation для управления службами Azure. Все еще получаю ту же ошибку. @logeshpalani31: Можете ли вы указать мне на приложение, о котором вы говорите?
Первоначально я создал приложение Microsoft Entra ID и добавил разрешения API, как показано ниже:
Я добавил роль участника в Service Principal, поскольку вы:
Когда я попытался получить доступ к API, я получил ту же ошибку, что и вы:
Ошибка обычно возникает, если приложению Microsoft Entra ID не предоставлены необходимые разрешения API.
Чтобы устранить эту ошибку, вам необходимо добавить делегированное разрешение API Azure Service Management, как показано ниже:
И в коде передайте область действия как https://management.azure.com/user_impersonation
например
scopes: ["https://management.azure.com/user_impersonation"]
Я могу успешно получить результаты API, как показано ниже:
const pca = new PublicClientApplication(msalConfig);
function FetchDataComponent() {
const { instance, accounts } = useMsal();
const [data, setData] = useState(null);
const [error, setError] = useState(null);
const loginRequest = {
scopes: ["https://management.azure.com/user_impersonation"],
};
const fetchData = async () => {
try {
const response = await instance.acquireTokenPopup(loginRequest);
const accessToken = response.accessToken;
const fetchResponse = await fetch('https://management.azure.com/subscriptions/xxx/resourceGroups/ruk/providers/Microsoft.Network/frontDoors?api-version=2019-05-01', {
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
if (!fetchResponse.ok) {
throw new Error(`HTTP error! status: ${fetchResponse.status}`);
}
const data = await fetchResponse.json();
setData(data);
} catch (err) {
setError(err.message);
}
};
return (
<div>
<button onClick = {fetchData}>Fetch Data</button>
{error && <p>Error: {error}</p>}
{data && <pre>{JSON.stringify(data, null, 2)}</pre>}
</div>
);
}
function App() {
return (
<MsalProvider instance = {pca}>
<AuthenticatedTemplate>
<FetchDataComponent />
</AuthenticatedTemplate>
<UnauthenticatedTemplate>
<p>Please sign in to see the data.</p>
</UnauthenticatedTemplate>
</MsalProvider>
);
}
export default App;
Поскольку у меня нет входной двери, я получил пустой вывод:
Большое спасибо! К сожалению, когда я добавляю управление службами Azure и меняю область, на странице входа я вижу эту ошибку: «Требуется одобрение администратора, требуется разрешение на доступ к ресурсам в вашей организации, которое может предоставить только администратор. Попросите администратора предоставить разрешение на это». приложение, прежде чем вы сможете его использовать.». Это странно, потому что страница разрешений API очищается и сообщает, что согласие администратора не требуется.
Можете ли вы вставить снимок экрана с настройками согласия и разрешений в корпоративных приложениях?
добавил снимки экрана в исходный вопрос, так как не могу сделать это в комментариях
Перейдите в Корпоративные приложения -> Согласие и разрешения -> Настройки согласия пользователя и вставьте скриншот.
Я прошу прощения. Добавил сейчас.
@PradeepVairamani Можете ли вы также вставить скриншот страницы настроек согласия администратора?
добавил и это
Еще один последний скриншот с классификацией разрешений :) @PradeepVairamani
Сделанный. И еще раз спасибо за всю помощь!
Давайте продолжим обсуждение в чате.
вы пробовали добавить
Azure Service Management
делегированные разрешения