Мы пытались обновить токен в автоматическом режиме (refre sh token), используя библиотеку Oid c -Client. Мы смогли успешно войти в систему. Но как только токен пользователя истек, страница тихого обратного вызова не вызывается, даже если она настроена, как показано ниже. Пожалуйста, помогите, если что-то отсутствует или исправьте заново. Также URI тихого перенаправления настроен на сервере идентификации как один из redirect_uri.
Login.ts
Office.initialize = function () {
var settings = {
authority: "https://xxxx.xxxxx.com/xxxx/v1",
client_id: "https://xxx.xxx.com/",
redirect_uri: "https://localhost:3000/taskpane.html",
post_logout_redirect_uri: "https://localhost:3000/logout.html",
revokeAccessTokenOnSignout: true,
response_type: "id_token token",
scope: "openid read:xxxx read:xxxx",
state: true,
filterProtocolClaims: true,
loadUserInfo: true,
nonce:true,
clearHashAfterLogin: true,
automaticSilentRenew: true,
silent_redirect_uri: 'https://localhost:3000/silent-refresh.html',
monitorsession:true,
metadata: {
issuer: 'https://xxx.xxx.com/xxx/v1',
authorization_endpoint: "https://xxx.xxx.com/xxxxx/v1/connect/authorize"
}
};
var mgr = new Oidc.UserManager(settings);
mgr.signinRedirect();
mgr.events.addAccessTokenExpiring(function(){
console.log("token expiring...");
});
}
silent-refre sh. html
<head>
<title>RefreshToken</title>
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
</head>
<body>
<script type="text/javascript" src=https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.10.0/oidc-client.js></script>
<script>
new Oidc.UserManager().signinSilentCallback().then((user)=>
{ consolse.log("silentrenewed");}
)
.catch((err) => {
console.log(err);
});
</script>
</body>
Auth.ts
import { UserManager, WebStorageStateStore } from "oidc-client";
export default class AuthSigninService {
private userManager: UserManager;
constructor() {
const settings: any = {
..................
automaticSilentRenew: true,
accessTokenExpiringNotificationTime: 4,
silent_redirect_uri: "https://localhost:3000/taskpane.html",
monitorsession:false,
};
this.userManager = new UserManager(settings);
}
public signin()
{
return this.userManager.signinRedirect();
}
public async silentRenew() {
try {
const user = await this.userManager.signinSilentCallback().then((success) => {
console.log("silentrenewed");
console.log(success);
}
)
.catch((err) => {
console.log(err);
});
}
catch (err) {
console.log(err);
}
}
}
taskpane.ts
document.getElementById('btnSilent').onclick = SilentRenew;
async function SilentRenew() {
const auth = new AuthSigninService();
auth.silentRenew();
}