+-
OAuth2和OpenID与angular-oauth2-oidc连接。为什么将JWT保存在本地存储中而不真正使用?

对于我正在使用此库的项目:angular-oauth2-oidc以支持OAuth 2和Angular中的OpenId Connect(OIDC)。

我已完成所有设置,并且一切正常。

MainComponent File:

export class MainComponent implements OnInit {

  constructor() {
    this.configureSSO();
  }

  configureSSO() {
    this.oAuthService.configure(authConfig);
    this.oAuthService.tokenValidationHandler = new JwksValidationHandler();

    this.oAuthService.loadDiscoveryDocumentAndTryLogin().then(() => {
      // the lib received the access_token as well as the id_token, if it was requested. 
      // If there is an id_token, the lib validated it.
      // DO STUFF WITH TOKEN HERE
    });
  }
}

authConfig文件:

import {AuthConfig} from 'angular-oauth2-oidc';

export const authConfig: AuthConfig = { /...SOME CONFIG HERE .../ }

AuthGuard文件:

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private router: Router, private oAuthService: OAuthService) {
  }

  canActivate(): boolean {
    if(this.oAuthService.hasValidIdToken()){
      return true;
    }
    return false;
  }
}

在OIDC提供商网站上成功登录后,我可以看到将access_token蜜蜂保存在本地浏览器的会话存储中:

enter image description here

这一切都很好,但是,如果我现在继续进行会话存储中的令牌[[change,我仍然可以进入受保护的路由。尽管access_token已更改。更改id_token时也是一样。

-> AuthGuard仍然允许我进入受保护的路由。

有人可以启发我如何做到这一点吗?

我无法在文档Documentation angular-oauth2-oidc中找到有关此内部处理方式的任何信息>

我很确定这不是实现错误,而是库将令牌保存在内部的某个地方,而是使用未更改的令牌,因为其他所有内容都可以正常工作。

但是如果不(真的)使用令牌,为什么仍将令牌保存在会话存储中呢?!?

更多:

如果我实际上是从存储中

删除

整个令牌,则实际上所有被阻止的路由都被阻止了,这很不错:)!当我将JWT内部的Expireation Time(exp)更改为实际时间之前的值时,也会发生同样的事情。因此,这两项检查实际上都可以正常工作,但是当更改access_tokenid_token时,AuthGuard仍然会获得有效的令牌...(也许是从lib内部![我认为我对JWT总体上不了解,为什么它们甚至保存在本地/会话存储中,或者为什么对其进行更改没有任何作用...

非常感谢任何回答。

对于使用该库的项目,我使用:angular-oauth2-oidc在OAuth 2中提供支持,在Angular中使用OpenId Connect(OIDC)。我已经完成所有设置,并且一切正常。 MainComponent文件:导出...

0
投票
在基本情况下,该库将假定JavaScript的每一位都可以在会话存储中“很好地发挥作用”,从而将其有效地视为该库的

private

存储。如果您想清除登录名以便路由卫士可以接听,则您不要自己 pry