如何使用 iFrame 在隐式流中手动执行静默刷新(使用 Identity Server 4,Angular 2+)
How to do Silent Refresh manually in implicit flow using iFrame (using Identity Server 4, Angular 2+)
我正在尝试使用带有隐式流的 iFrame 进行静默刷新。我不想使用 automaticSilentRenew,因为它效率不高。我在客户端使用 oidc-client 库 Angular 8。所以,有两件事正在发生:
1.) 我正在使用 auth-guard 来保护重要组件。在 auth-guard 中,我正在检查令牌是否有效,如果无效,我将调用 auth-service class 的 signinRedirect 来获取新令牌。
2.) 我没有使用 auth-guard 保护安全的 API 调用组件,这样我就可以得到无效令牌的 401 unauthorized 错误。但是如果我用 auth-guard 保护它,它会在获得新的令牌集后将我路由到 auth-callback 并且原始请求丢失。
我想以某种方式使这个过程自动化。就像,使用 auth-guard 保护 API 调用组件,当我尝试使用过期令牌访问 API 时,auth-guard 开始发挥作用,在幕后使用有效令牌更新当前请求从而提供无缝的用户体验。
export class AuthService {
private manager = new UserManager(getClientSettings());
private user: User = null;
constructor() {
this.manager.getUser().then(user => {
this.user = user;
});
this.manager.events.addAccessTokenExpiring(async function(){
await this.manager.signinSilent().then(user => {
});
});
}}
我试图在我的 auth-service class 的构造函数中捕获 addAccessTokenExpiring 事件并调用 signinSilent 来获取新 access_token。该事件确实在令牌到期之前开始,但我在此事件中得到 this.manager 未定义。
请分享您的宝贵意见以实现这一目标。任何现有的例子都是非常值得赞赏的。
谢谢!
Tarun Ohri
我的偏好是遵循类似的方法,但不依赖于客户端令牌过期,方法是允许出现 401,然后刷新令牌并使用新令牌重试 API 请求。
如果有帮助,这里有 2 个关键 类:
我正在尝试使用带有隐式流的 iFrame 进行静默刷新。我不想使用 automaticSilentRenew,因为它效率不高。我在客户端使用 oidc-client 库 Angular 8。所以,有两件事正在发生:
1.) 我正在使用 auth-guard 来保护重要组件。在 auth-guard 中,我正在检查令牌是否有效,如果无效,我将调用 auth-service class 的 signinRedirect 来获取新令牌。
2.) 我没有使用 auth-guard 保护安全的 API 调用组件,这样我就可以得到无效令牌的 401 unauthorized 错误。但是如果我用 auth-guard 保护它,它会在获得新的令牌集后将我路由到 auth-callback 并且原始请求丢失。
我想以某种方式使这个过程自动化。就像,使用 auth-guard 保护 API 调用组件,当我尝试使用过期令牌访问 API 时,auth-guard 开始发挥作用,在幕后使用有效令牌更新当前请求从而提供无缝的用户体验。
export class AuthService {
private manager = new UserManager(getClientSettings());
private user: User = null;
constructor() {
this.manager.getUser().then(user => {
this.user = user;
});
this.manager.events.addAccessTokenExpiring(async function(){
await this.manager.signinSilent().then(user => {
});
});
}}
我试图在我的 auth-service class 的构造函数中捕获 addAccessTokenExpiring 事件并调用 signinSilent 来获取新 access_token。该事件确实在令牌到期之前开始,但我在此事件中得到 this.manager 未定义。
请分享您的宝贵意见以实现这一目标。任何现有的例子都是非常值得赞赏的。
谢谢!
Tarun Ohri
我的偏好是遵循类似的方法,但不依赖于客户端令牌过期,方法是允许出现 401,然后刷新令牌并使用新令牌重试 API 请求。
如果有帮助,这里有 2 个关键 类: