如何在身份服务器身份验证 oidc-client Angular 后关闭 signinPopup() 窗口

bil*_*mic 5 openid-connect identityserver4 angular

我有一个 Angular 应用程序,我需要通过 Identity Server 4 对用户进行身份验证。我在 UserManager 上使用 signinPopup() 方法。这按设计工作。当我启动登录时,它会打开弹出窗口和登录表单。

登录成功,但不是关闭弹出窗口和登录声明信息传递到“打开器”窗口,它只是在弹出窗口中加载 post_login_redirect_uri。

我需要它来关闭此窗口,然后该数据可用于启动 signinPopup 的应用程序,而不是在弹出窗口本身中。

而且,如果我手动关闭该窗口,数据仍然不会传递回主(弹出窗口的发起者)窗口。改为捕获错误。

我一直在研究并发现了一些关于如何做到这一点的帖子,但没有描述性。我不认为编辑身份服务器登录代码来处理关闭弹出窗口是执行此操作的“正确”方法。

有人可以帮忙吗?

//THis launches popup and authentication is successful. 
startSigninPopup(){

this.mgr.signinPopup().then((user) =>{
  console.log(user);
  return user;
}).catch((error) => {
 // if manually closing the popup, I end up in catch with error.
  console.log(error)
})
Run Code Online (Sandbox Code Playgroud)

}

小智 5

我有同样的问题,并在 oidc-client 的 github 上的示例代码中找到了线索

在此示例中,signinPopup() 重定向到一个仅调用new Oidc.UserManager().signinPopupCallback(); 的页面。

这将关闭弹出窗口并成功解析来自父页面的承诺。


小智 0

它可能就像使用 popup_redirect_uri 而不是 post_login_redirect_uri 一样简单。请参阅https://github.com/IdentityModel/oidc-client-js/wiki