【发布时间】:2020-06-12 04:43:59
【问题描述】:
我正在尝试使用带有隐式流的 iFrame 进行静默刷新。我不想使用 automaticSilentRenew,因为它效率不高。我在客户端使用 Angular 8 中的 oidc-client 库。所以,有两件事正在发生:
1.) 我正在使用 auth-guard 来保护重要组件。在 auth-guard 中,我正在检查令牌是否有效,如果不是,那么我将调用 auth-service 类的 signinRedirect 来获取新令牌。
2.) 我没有使用 auth-guard 保护安全 API 调用组件,因此我可能会收到无效令牌的 401 未授权 错误。但是如果我用 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 类的构造函数中捕获 addAccessTokenExpiring 事件并调用 signinSilent 以获取新的 access_token。该事件确实在令牌到期之前开始,但我在此事件中得到 this.manager 未定义。
请分享您的宝贵意见以实现这一目标。任何现有的例子都将是非常可观的。
谢谢你!
塔伦·奥里
【问题讨论】:
-
您可以在您的身份验证请求中添加一些
state(即:原始请求)。然后在您收到回调的页面上,使用此状态重定向回原始请求。 -
@PabloRecalde 感谢您的及时回复。我已经编辑了我的帖子,你能看看并尝试帮助我哪里出错了吗?谢谢!
-
当你在传递给另一个方法的内联函数中使用它时,它并不引用你的类。您需要使用
arrow function或bind()
标签: angular oauth-2.0 identityserver4 openid-connect implicit-flow