使用 Angular 和 OneLogin OIDC 的 github 存储库时遇到令牌刷新和注销功能问题



我在 https://github.com/onelogin/onelogin-oidc-angular 克隆了示例存储库,并更改了配置详细信息以指向我的Onelogin实例。但是,我在开箱即用的注销和自动令牌续订功能时遇到了一些问题。

对于注销功能,我从oidc-client.js库中调用了signoutRedirect函数。我还确保在身份验证服务中设置了注销后重定向 URI。post_logout_redirect_uri: 'http://localhost:4200/logout'但是,当我触发注销功能时,我注意到它确实清除了会话存储(默认情况下存储令牌和其他元数据的位置(,但它也会记录控制台错误消息,并且不会重定向到上面配置的注销路由。

错误消息是:Error: no end session endpoint。请注意,存储库(https://openid-connect.onelogin-shadow01.com/oidc(中auth.service.ts文件中提供的授权字段值对我们不起作用,因此我们将其切换为:https://xxx.onelogin.com/oidc/.well-known/openid-configuration

根据有关如何测试静默自动令牌续订 (https://www.scottbrady91.com/OpenID-Connect/Silent-Refresh-Refreshing-Access-Tokens-when-using-the-Implicit-Flow( 的说明的支持博客,我将网络选项卡保持打开状态,以查看是否自动发送请求以续订令牌。我确实看到身份验证端点在令牌到期(1 小时(附近被调用,但是,默认情况下存储在会话存储中的 id 令牌 + 元数据不会更新。

我们是否缺少另一个步骤来在续订时手动调整令牌?

谢谢!

在 oidc-client 中.js有一个事件addUserLoaded,你必须听它 na d这将有助于你加载和更新带有元数据的新用户

this._userManager.events.addUserLoaded((args) => {
this._userManager.getUser().then((user) => {
this._user = user;
console.log(user);
});
});

您可以显示它的内容,并查看您的身份提供程序发送了什么作为回报, 这是我的静默刷新 HTML 文件内容

<script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.5.1/oidc-client.min.js"></script>
<script>
var config = {
userStore: new Oidc.WebStorageStateStore({ store: window.localStorage })
};
new Oidc.UserManager(config).signinSilentCallback()
.catch((err) => {
console.log(err);
});
</script>

最新更新