我在is.mysite.com
有身份服务器4,然后有mysite.com
,它使用angular服务内容。最后,我有api.mysite.com
,它使用is4保护内容。
我想知道的是用户注销后令牌的生存期的预期行为是什么。请考虑以下情形:
我得到的当前结果是用户能够检索数据。这是预期的吗?用户是否应该因为注销而不能再使用该令牌?我注销用户的方式如下:
await _loginManager.LoggOffAsync(HttpContext.User);
await HttpContext.SignOutAsync();
此外,如果我访问is.mysite.com,则该用户确实已注销。
答案 0 :(得分:1)
角度客户端可以使用session management规范来监视用户的会话状态,这是通过iframe实现的。有关注销过程的更多信息,您可以查看official documentation,特别是描述Javascript客户端的部分。
鉴于会话管理规范的设计方式,IdentityServer中没有什么特别的事情需要通知这些客户端用户已经注销。但是,客户端必须在check_session_iframe上执行监视,并且该监视由oidc-client JavaScript library实现。
预期的行为是访问令牌保持有效,这就是为什么访问令牌在短时间内有效的原因。如果您需要精确控制访问令牌的有效性,可以查看reference tokens,这些令牌可以被撤销。
答案 1 :(得分:0)
我已经将我的IdentityServer4设置为ReactJS客户端。为了与IdentityServer4进行javascript客户端通信,我假设您可能已经安装了oidc-client-js。通过它,您可以将用户从AngularClient(mysite.com)重定向到IdentityServer4(is.mysite.com)
如果是这样,则必须在注销按钮单击中调用signoutRedirect()方法。 只有这样,您的AngularClient(mysite.com)才能从IdentityServer4(is.mysite.com)成功注销用户。
用户注销后,其余选项卡将收到通知,并将被浏览器注销。
“请确保在控制器上添加[Authorize]标签,以限制客户端使用没有有效访问令牌的API。”
答案 2 :(得分:0)
如果您谈论的是带有安全标记的令牌,则取决于您为服务配置的验证间隔。将该值设置为零将使安全标记在每个请求上均得到验证,因此到处注销都将立即生效:
https://docs.microsoft.com/en-us/previous-versions/aspnet/dn497603%28v%3dvs.108%29
如果这不是您到处注销的方式,那么我们需要查看更多的身份验证设置代码以了解问题出在哪里。