У меня возникают проблемы с получением токена доступа из моего приложения React при попытке доступа к моему собственному веб-API .NET Core 3.1. Я могу нормально войти в систему и получить доступ к пользовательским данным, но когда я пытаюсь получить токен доступа, я постоянно получаю указанную ниже ошибку. Буду признателен за любую помощь или толчок в правильном направлении. Спасибо!
Неперехваченный (в обещании) BrowserAuthError: silent_sso_error: Тихий единый вход не может быть завершен - предоставлена недостаточная информация. Укажите логин-подсказку или sid.
Вот что у меня есть:
- Настройте регистрацию приложения React (SPA с перенаправлением на localhost: 3000 с использованием потока кода аутентификации)
- Настройка регистрации приложения .NET Core для веб-API (Интернет с перенаправлением на localhost: 44347)
- Созданы две области для веб-API (чтение и запись)
- Предоставил API-разрешение для спа для областей веб-API
Настройка веб-API .NET Core 3.1 (ref: https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-protected-web-api-app-configuration):
- Запуск ConfigureServices
services.AddMicrosoftIdentityWebApiAuthentication(Configuration, "AzureAdB2C");
- appsettings.json
"AzureAdB2C": {
"Instance": "https://{example}.b2clogin.com",
"ClientId": "{web api Client ID}",
"TenantId": "xxxxxxxxxxxx",
"Audience": "https://{example}.onmicrosoft.com/api"
}
Настройка React с использованием @ azure / msal-browser: ^ 2.7.0 и @ azure / msal-react: ^ 1.0.0-alpha.0 (ref: https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-react):
- index.tsx
const configuration: Configuration = {
auth: {
clientId: '{SPA Client ID}',
authority: 'https://{example}.b2clogin.com/{example}.onmicrosoft.com/B2C_1_SignUpIn',
knownAuthorities: ['{example}.b2clogin.com'],
},
cache: {
cacheLocation: 'localStorage', // This configures where your cache will be stored
storeAuthStateInCookie: false // Set this to "true" to save cache in cookies
}
};
const pca = new PublicClientApplication(configuration);
<MsalProvider instance={pca}>
<App />
</MsalProvider>
- App.tsx
useEffect(() => {
if (error) {
login(InteractionType.Popup);
}
}, [error, login]);
- Доступ к коду токена
const { instance, accounts, inProgress } = useMsal();
useEffect(() => {
if (inProgress === 'none' && accounts.length > 0) {
const request = {
account: accounts[0],
scopes: ["https://{example}.onmicrosoft.com/api/scope.read"]
};
// Retrieve an access token
instance.acquireTokenSilent(request)
.then(response => {
console.log('response', response);
if (response.accessToken) {
console.log('accessToken', response.accessToken);
return response.accessToken;
}
return null;
})
.catch(error => console.log('token error', error));
}
}, [inProgress, accounts, instance]);