当我从angular2应用程序注销时,Angular2 oidc-client不清除mvc应用程序的cookie

时间:2018-05-22 14:39:41

标签: angular identityserver3 oidc-client-js

我有一个授权服务器,目前我的angular2应用程序和mvc webapp都已使用。

我已经使用oidc-client javascript包在angular2 app中实现了授权。除了注销功能外,一切正常。

public logoff(): void {
    this.customAuthService.startSignoutMainWindow();
}

startSignoutMainWindow() {
    this.manager.getUser().then(user => {
        return this.manager.signoutRedirect({ id_token_hint: user.id_token }).then(resp => {
            console.log('signed out', resp);
            setTimeout(5000, () => {
                console.log('testing to see if fired...');
            });
        }).catch(function (err) {
            console.log(err);
        });
    });
};

这是我用来注销使用oidc-client实现授权的angular2应用程序的代码。

但这并没有退出我的其他asp.net web mvc应用程序。

但反过来工作正常,即如果我退出我的mvc Web应用程序,我的角度应用程序会重定向到授权服务器进行登录。

任何人都可以帮忙解决这个问题,这样如果我退出我的angular2应用程序,我应该可以使用mvc应用程序而无需再次登录。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  1. 发起退出:

    let userManager = new Oidc.UserManager(oidcSettings);
    public startLogout(): Promise<any>
            {
                return this.userManager.signoutRedirect();
            }
    
  2. 完成注销

     public completeLogout(url?: string): Promise<any>{
    
        return this.userManager.signoutRedirectCallback(url)
            .then((user: OidcClientUser) =>
            {                  
                // This will clear the OpenID access tokens that is stored in the session
                return this.userManager.clearStaleState();
           });                 
    }
    
  3. 在logoutComplete上,您需要从浏览器清除session和clientDeeplinks 像这样的东西:

      public clear(ClientDeepLink?: string): void
            {
                if ((key) && (key.trim().length > 0))
                {
                    this.$window.localStorage.removeItem(key);
                }
                else
                {
                    this.$window.localStorage.clear();
                }
            }