Identity Server 4注销-令牌生存期

时间:2019-03-02 19:23:18

标签: c# asp.net-identity identityserver4 identity asp.net-core-identity

我在is.mysite.com有身份服务器4,然后有mysite.com,它使用angular服务内容。最后,我有api.mysite.com,它使用is4保护内容。

我想知道的是用户注销后令牌的生存期的预期行为是什么。请考虑以下情形:

  1. 用户打开mysite.com并单击登录。
  2. 用户被重定向到is.mysite.com并登录
  3. 用户重定向回mysite.com,可以发出api请求。
  4. 用户在浏览器中打开一个新标签,然后转到is.mysite.com,然后单击注销。
  5. 用户返回到mysite.com所在的上一个标签,并尝试进行api调用。

我得到的当前结果是用户能够检索数据。这是预期的吗?用户是否应该因为注销而不能再使用该令牌?我注销用户的方式如下:

await _loginManager.LoggOffAsync(HttpContext.User);
await HttpContext.SignOutAsync();

此外,如果我访问is.mysite.com,则该用户确实已注销。

3 个答案:

答案 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

如果这不是您到处注销的方式,那么我们需要查看更多的身份验证设置代码以了解问题出在哪里。