2

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

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

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);
        });
    });
};

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

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

但反过来工作正常,即如果我注销我的 mvc Web 应用程序,我的 Angular 应用程序将重定向到授权服务器以登录。

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

提前致谢。

4

1 回答 1

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();
           });                 
    }
    

在 logoutComplete 上,您需要从浏览器中清除 session 和 clientDeeplinks,如下所示:

  public clear(ClientDeepLink?: string): void
        {
            if ((key) && (key.trim().length > 0))
            {
                this.$window.localStorage.removeItem(key);
            }
            else
            {
                this.$window.localStorage.clear();
            }
        }
于 2018-05-23T06:27:24.250 回答