Выход из системы не очищает весь процесс с использованием клиента oidc с сервером идентификации 4
Мы используем Office.context.ui.displayDialogAsync для аутентификации с помощью библиотеки OAUTH (Oidc-client), и ниже представлены результаты. Пожалуйста, помогите в том же.
- Согласно приложенному коду мы смогли получить токен доступа в файле taskpane.ts как аргументы в messageHandler...
- Но когда я вошел в новый браузер, тогда открылось только окно входа в службу Secure Token Service (STS).
- Если я выхожу из системы и очищаю токен доступа, то снова пытаюсь войти в систему в этот раз напрямую, войдя как зарегистрированный пользователь, не открывая окно службы безопасных токенов (STS).
- Как только я очистил кеш браузера, и все, тогда только я смогу снова получить окно Secure Token Service (STS)... Не могли бы вы посоветовать сценарий для обработки? Нам что-нибудь нужно.
Текущий сценарий
displayDialogAsync открывается в качестве входа в STS в первый раз и может успешно войти в систему. Но при последующем входе в систему не появляется всплывающее окно, а данные напрямую загружаются токенами.
Ожидаемый сценарий
displayDialogAsync должен открываться не только при первом входе в систему, но также должен открываться для последующего входа в систему, что означает, что если пользователь вышел из системы и попытается снова войти в систему в этот раз, он также должен появиться. Нужно ли что-нибудь очистить кеш для displayDialogAsync? Пожалуйста, помогите.
auth.ts
Office.initialize = function () {
var settings = {
authority: "https://xxxxxx.com/xxxx/xx",
client_id: "https://xxxxxxx.com/",
redirect_uri: "https://localhost:3000/taskpane.html",
// silent_redirect_uri:"https://localhost:3000/taskpane.html",
post_logout_redirect_uri: "https://xxxxxxx.com/",
response_type: "id_token token",
scope: "openid read:xxxx read:xxxxxx read:xxxxxxx",
state: true,
clearHashAfterLogin: false,
filterProtocolClaims: true,
loadUserInfo: true,
nonce:true,
};
Oidc.Log.logger = console;
var mgr = new Oidc.UserManager(settings);
mgr.signinRedirect();
mgr.signinRedirectCallback().then((user) => {
if (user) {
console.log(user);
} else {
mgr.signinPopupCallback().then(function (user) {
window.location.href = '../';
}).catch(function (err) {
console.log(err);
});
throw new Error('user is not logged in');
}
});
};
taskpane.ts
const loginpopup = function () {
if (OfficeHelpers.Authenticator.isAuthDialog())
return;
Office.context.ui.displayDialogAsync(
url,
{ height: 60, width: 60, /*displayInIframe:true*/ },
dialogCallback);
function dialogCallback(asyncResult) {
if (asyncResult.status == "failed") {
switch (asyncResult.error.code) {
case 12004:
console.log("Domain is not trusted");
break;
case 12005:
console.log("HTTPS is required");
break;
case 12007:
console.log("A dialog is already opened.");
break;
default:
console.log(asyncResult.error.message);
break;
}
}
else {
dialog = asyncResult.value;
dialog.addEventHandler(Office.EventType.DialogMessageReceived, messageHandler);
}
}
function messageHandler(arg: any) {
if (arg != "jsonMessage") {
$(".loader").show();
var test = JSON.parse(arg.message).value.split("#")[1].split("&")[1].split("=");
dialog.close();
};
}
}
logout.ts
Office.initialize = () => {
var settings = {
authority: "https://xxxxxx.com/xxxxxx/v1",
client_id: "https://xxxxxxx.com/",
redirect_uri: "https://localhost:3000/logout.html",
post_logout_redirect_uri: "https://localhost:3000/logout.html",
metadata: {
issuer: 'https://xxxxxx.com/xxxxxx/v1',
authorization_endpoint: "https://xxxxxx.com/xxxxxxx/v1/xxxxx"
}
};
var mgr = new Oidc.UserManager(settings);
mgr.signoutRedirect();
mgr.removeUser();
mgr.revokeAccessToken();
mgr.clearStaleState();
$("document").ready(function () {
localStorage.removeItem('accessToken');
localStorage.clear();
});