Я работаю над ASP.NET Core React с приложением Redux, которое находится в Azure webapp
. Недавно я хотел интегрировать Azure Active Directory или AAD в свое приложение, чтобы использовать единый вход для моих пользователей.
Чтобы достичь этого, я решил использовать реагирующий адал от github . Интеграция которого очень легка и, кажется, работает хорошо.
После добавления react-adal
я обнаружил, что моему приложению не удается получить данные через любой из моих API, даже после того, как я вошел в систему. Глядя на сетевые вызовы в консоли, я вижу состояние 302
, сообщаемое любым ПОЛУЧИТЕ запрос, который отправлен в API.
Глядя на предоставленную информацию, я вижу заголовок ответа
Location https://login.microsoftonline...
Итак, я вижу, что когда он запрашивает данные, он все еще пытается аутентифицироваться, даже если я уже вошел в систему. Я передал свой API через Postman и, как и ожидалось, он просит меня войти в систему, поэтому я знаю, что это проблема аутентификации.
У меня вопрос: почему после входа в систему все равно не регистрируется, что я прошел аутентификацию или я сделал что-то не так с моей интеграцией react-adal
?
Здесь приведены мои настройки своего реактивного приложения, а также приложения Azure Active Directory.
ClientApp / SRC / adalConfig
import { AuthenticationContext, adalFetch, withAdalLogin } from 'react-adal';
export const adalConfig = {
tenant: 'xxxxxxxxxxxxxxxxxxxx',
clientId: 'xxxxxxxxxxxxxxxxxxxxxxxx',
endpoints: {
api: 'xxxxxxxxxxxxxxxxxxxx',
},
cacheLocation: 'localStorage',
};
export const authContext = new AuthenticationContext(adalConfig);
export const adalApiFetch = (fetch, url, options) =>
adalFetch(authContext, adalConfig.endpoints.api, fetch, url, options);
export const withAdalLoginApi = withAdalLogin(authContext, adalConfig.endpoints.api);
ClientApp / ЦСИ / index.js
import { runWithAdal } from 'react-adal';
import { authContext } from './adalConfig';
const DO_NOT_LOGIN = false;
runWithAdal(authContext, () => {
// eslint-disable-next-line
require('./indexApp.js')
}, DO_NOT_LOGIN)
ClientApp / ЦСИ / indexApp.js
import "bootstrap/dist/css/bootstrap.css";
import "./assets/css/site.css";
import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { ConnectedRouter } from "react-router-redux";
import { createBrowserHistory } from "history";
import configureStore from "./store/configureStore";
import App from "./App";
import registerServiceWorker from "./registerServiceWorker";
// Create browser history to use in the Redux store
const baseUrl = document.getElementsByTagName("base")[0].getAttribute("href");
const history = createBrowserHistory({ basename: baseUrl });
// Get the application-wide store instance, prepopulating with state from the server where available.
const initialState = window.initialReduxState;
const store = configureStore(history, initialState);
const rootElement = document.getElementById("root");
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}>
<App />
</ConnectedRouter>
</Provider>,
rootElement
);
registerServiceWorker();
ClientApp / appsettings.json
"AzureAd": {
"ClientId": "xxxxxxxxxxxxxxxxx",
"Domain": "mycompany.onmicrosoft.com",
"Instance": "https://login.microsoftonline.com/",
"TenantId": "xxxxxxxxxxxxxxxxxxx",
"CallbackPath": "/signin-oidc",
"ClientSecret": "xxxxxxxxxxxxxxxx",
"AppIDURL": "https://mycompany.onmicrosoft.com/myappname",
"ConfigView": "MVC"
}
Azure / Регистрация приложения / Манифест
{
"appId": "6239a5f3-bf08-4935-9140-2ed0a8f2dad9",
"appRoles": [],
"availableToOtherTenants": false,
"displayName": "Hagland Broker",
"errorUrl": null,
"groupMembershipClaims": null,
"optionalClaims": null,
"acceptMappedClaims": null,
"homepage": "https://mywebsite.azurewebsites.net/",
"informationalUrls": {
"privacy": null,
"termsOfService": null
},
"identifierUris": [
"https://mycompany.onmicrosoft.com/MyApplication"
],
"keyCredentials": [],
"knownClientApplications": [],
"logoutUrl": null,
"oauth2AllowImplicitFlow": false,
"oauth2AllowUrlPathMatching": false,
"oauth2Permissions": [
{
"adminConsentDescription": "Allow the application to access MyApplication on behalf of the signed-in user.",
"adminConsentDisplayName": "Access MyApplication",
"id": "xxx",
"isEnabled": true,
"type": "User",
"userConsentDescription": "Allow the application to access MyApplication on your behalf.",
"userConsentDisplayName": "Access MyApplication",
"value": "user_impersonation"
}
],
"oauth2RequirePostResponse": false,
"objectId": "xxxx",
"parentalControlSettings": {
"countriesBlockedForMinors": [],
"legalAgeGroupRule": "Allow"
},
"passwordCredentials": [
{
"customKeyIdentifier": null,
"endDate": "2020-04-23T14:50:19.7214445Z",
"keyId": "xxx",
"startDate": "2019-04-23T14:50:19.7544684Z",
"value": null
}
],
"publicClient": false,
"replyUrls": [
"https://mywebsite.azurewebsites.net/"
],
"requiredResourceAccess": [
{
"resourceAppId": "xxxx",
"resourceAccess": [
{
"id": "xxxx",
"type": "Scope"
},
{
"id": "xxxx",
"type": "Scope"
}
]
}
],
"samlMetadataUrl": null
}