Следующий код oAuth2 SSO в моем Office. js приложение-надстройка прекрасно работает в IE11, Chrome, Safari и Firefox, но не работает в Microsoft Edge. Я вижу, что токен-носитель возвращается во всплывающее диалоговое окно через URL-адрес:
https://localhost: 3000 / login? Access_token = ya29.ImG6By-0ZWPQB4MsYxxxxxxxxxxxxxxxxxxxxxxxxxxxx5xxsxxxE5XsM9S0BQAXBX5
Я также вижу, что asyncResult.status == успешно выполнено, то есть
[объект объекта]: {статус: "успешно", значение: объект} статус: "успешно"
значение: объект
addEventHandler: function () {var d = OSF.DDA.SyncMethodCalls [OSF.DDA.SyncMethodNames.AddMessageHandler.id], c = d.verifyAndExtractCall (arguments, a, b) , e = c [Microsoft.Office.WebExtension.Parameters.EventType], f = c [Microsoft.Office.WebExtension.Parameters.Handler]; вернуть b.addEventHandlerAndFireQueuedEvent (e, f)} аргументы: нулевой абонент: нулевая длина: 0 имя: "значение"
прототип: объект
proto : function () {[собственный код]}
close: function () {var с = OSF._OfficeAppFactory.getHostFacade () [OSF.DDA.DispIdHost.Methods.CloseDia log]; c (аргументы, g, b, a)}
sendMessage: function () {var c = OSF._OfficeAppFactory.getHostFacade () [OSF.DDA.DispIdHost.Methods.SendMessage]; return c (arguments, b, a)}
proto : Объект
proto : Объект
Однако, "console.log ('hello');" не вызывается, когда Microsoft Edge запускает боковую панель / надстройку.
Всплывающее диалоговое окно показывает это в консоли отладки F12:
HTTP403: FORBIDDEN - сервер понял запрос, но отказывается его выполнить. (XHR) POST - https://browser.pipe.aria.microsoft.com/Collector/3.0/?qsp=true&content-type=application%2Fbond-compact-binary&client-id=NO_AUTH&sdk-version=AWT-Web-JS-1.1.1&x-apikey=a387cfcf60114a43a7699f9fbb49289e-9bceb9fe-1c06-460f-96c5-6a0b247358bc-7238&client-time-epoch-millis=1579626709267&time-delta-to-apply-millis=961
Есть идеи?
export function loginUsingOAuth() {
try {
const sealUrl = getFromStorage('seal_url', STORAGE_TYPE.LOCAL_STORAGE);
const redirectUrl = `${window.location.protocol}//${window.location.host}/login`;
let displayInIframe = false;
let promptBeforeOpen = false;
if (typeof sealUrl !== 'undefined' && sealUrl) {
const oAuthUrl = `${sealUrl}/seal-ws/oauth2/login?redirect_uri=${redirectUrl}`;
Office.context.ui.displayDialogAsync(
oAuthUrl,
{
height: 80,
width: 80,
displayInIframe,
promptBeforeOpen
},
asyncResult => {
console.log('asyncResult');
console.log(asyncResult);
addLog(LOG_TYPE.INFO, 'authentication.loginUsingOAuth', asyncResult);
if (asyncResult.status !== 'failed') {
const dialog = asyncResult.value;
dialog.addEventHandler(Office.EventType.DialogMessageReceived, args => {
console.log('hello');
Может быть, это проблема маршрутизации при выполнении в Edge? Обратный вызов «/ login» направляется компоненту AuthCallback. js:
const Routes = () => (
<BrowserRouter>
<Switch>
<Route exact path="/login" component={AuthCallback} />
<Route path="/" component={BaseLayout} />
</Switch>
</BrowserRouter>
);
Конструктор компонента AuthCallback. js компонент вызывает messageParent после короткой паузы:
constructor(props) {
super(props);
const paramsObj = queryString.parse(props.location.search);
const paramsStr = JSON.stringify(paramsObj);
setTimeout(() => {
Office.context.ui.messageParent(paramsStr);
}, 1200);
}
Я начинаю задумываться, не перебивает ли Edge переадресацию. На изображении ниже видно, что IE и Edge возвращают разные коды состояния для одной и той же операции входа в систему: