identityserver4 - ValidateAntiForgeryToken 阻止新登录
问题描述
我有一个非常简单的身份服务器 4 实现,我正在使用oidc-client
我的 Angular APP 进行所有安全管理。在我的身份验证服务中,我有以下内容:
@Injectable()
export class AuthService {
private manager: UserManager;
private user: User = null;
constructor() {
if (!environment.production) {
Log.logger = console;
}
this.manager = new UserManager(getClientSettings());
this.manager.getUser()
.then(user => {
this.user = user;
});
this.manager.events.addUserSignedOut(() => {
this.user = null;
this.signOut();
});
}
signOut(): Promise<void> {
return this.manager.signoutRedirect()
.then(() => {
this.manager.clearStaleState();
});
}
...more
}
export function getClientSettings(): UserManagerSettings {
return {
authority: environment.authorityUrl,
client_id: 'myclient',
redirect_uri: `${environment.baseUrl}/auth-callback`,
post_logout_redirect_uri: environment.baseUrl,
response_type: 'id_token token',
scope: 'openid profile myapi',
filterProtocolClaims: true,
loadUserInfo: true,
automaticSilentRenew: true,
revokeAccessTokenOnSignout : true,
silent_redirect_uri: `${environment.baseUrl}/silent-renew-callback`,
};
}
一切都像一个魅力,所以我可以登录/退出没有任何问题,令牌更新按预期工作,到目前为止一切都很好。但是,当用户在同一浏览器的多个选项卡中打开应用程序并且其中一个注销时,我决定实现“自定义”行为。然后触发 UserSignedOut 事件,然后我退出可能打开的其余选项卡。我遇到的问题是,当用户返回时,第一次登录尝试正确执行,但是来自任何其他选项卡的任何后续登录请求都会导致 400 - BAD REQUEST(从我的 IS4 中的登录方法中删除 Antiforgery 令牌属性然后它可以工作,但我不想这样做)。
如果您确实刷新了选项卡,那么您就会登录,因此对我来说,实际状态本身似乎有问题?
我不确定是否应该在注销之前调用 AuthService 中的任何其他方法,或者是否应该为此使用自定义行为重新实现 ValidateAntiForgeryToken。
非常感谢任何帮助,谢谢!
解决方案
推荐阅读
- typescript - 如何在 AWS CDK 的 CfnBucketPolicy 中提供 policyDocument
- java - Eclipse - 滚动到 Maven 项目中的依赖项类
- node.js - 使用 Sequelize 时,如何从具有字符串数组值(逗号分隔的数据)的列中获取不同的值计数?
- python - 在 pandas df 中删除一行
- react-native - 尝试创建新帖子时出现 401 错误
- asp.net - ASP.Net Web API - 在公共位置提取标头
- c++ - C++ 程序错误:malloc():内存损坏
- ios - iOS VewController 顶部带有手动处理程序以向上/向下滑动
- postman - 邮递员脚本设置环境变量
- c# - 当我将此部分视图用于我在 mvc 中使用两个类的元组的视图中时,如何将 basemodel 类传递给部分视图