【发布时间】:2020-11-25 22:04:12
【问题描述】:
我们尝试使用 Oidc-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-refresh.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();
}
【问题讨论】:
标签: typescript single-page-application identityserver4 openid-connect oidc-client-js