注销时未删除IdentityServer3令牌

时间:2016-07-13 07:39:42

标签: c# oauth-2.0 logout identityserver3

我正在使用IdentityServer3并实现了自定义授权流程,以便与现有SSO实现向后兼容。我正在使用引用标记进行API身份验证。我已经实现了ITokenHandleStore和IUserService。

我能够成功登录并访问我的应用程序。问题是在我注销后,引用令牌仍然有效。

注销后,我调用HttpContext.Current.GetOwinContext()。Authentication.SignOut();我还调用/ connect / endsession?id_token_hint = mYrEfErEnCeToKeN并在查询字符串参数上传递用户的引用标记。

但是,IUserService中的SignOutAsync方法和ITokenHandleStore中的RemoveAsync方法都不会被调用。因此,令牌保留在我的令牌数据库表中,即使在用户注销后,也会在后续请求中被视为有效令牌。

在执行自定义授权流程时注销用户的正确方法是什么?如何从数据库令牌存储中删除记录?

当我调用endsession端点时,来自IdentityServer的日志记录显示:

  

Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:07:14.835 -04:00 [信息]结束访问令牌   验证请求Sam.Web.MicroServices.IdentityService.vshost.exe   信息:0:20​​16-07-13 04:09:22.289 -04:00 [信息]开始   结束会话请求Sam.Web.MicroServices.IdentityService.vshost.exe   信息:0:20​​16-07-13 04:09:22.349 -04:00 [信息]开始   结束会话请求验证   Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:09:22.412 -04:00 [信息]启动身份令牌   验证Sam.Web.MicroServices.IdentityService.vshost.exe错误:0:   2016-07-13 04:09:22.581 -04:00 [错误]格式错误的JWT令牌   System.ArgumentException:IDX10709:' jwtEncodedString'不太好   形成:' 7dc2417fb752d096af2870c46ca8a181'。字符串需要在   紧凑的JSON格式,其形式如下:   ' ..&#39 ;.在   System.IdentityModel.Tokens.JwtSecurityToken..ctor(字符串   jwtEncodedString)in   C:\工作空间\ WilsonForDotNet45Release \ SRC \ System.IdentityModel.To   kens.Jwt \ JwtSecurityToken.cs:第68行   IdentityServer3.Core.Validation.TokenValidator.GetClientIdFromJwt(字符串   令牌)   C:\本地\身份\服务器3 \核心\源\核心\验证\ TokenVa   lidator.cs:第347行Sam.Web.MicroServices.IdentityService.vshost.exe   错误:0:20​​16-07-13 04:09:22.648 -04:00 [错误]没有clientId   提供,不能在身份标识中找到id。   Sam.Web.MicroServices.IdentityService.vshost.exe错误:0:20​​16-07-13   04:09:22.701 -04:00 [错误]"验证ID令牌提示时出错。" " {
  \" SubjectId \":\" unknown \",\" Raw \":{       \" id_token_hint \":\" 7dc2417fb752d096af2870c46ca8a181 \" " Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:09:22.753 -04:00 [信息]重定向到注销   page Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:09:22.872 -04:00 [信息]提交注销端点   Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:09:22.944 -04:00 [信息]清除cookies   Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:09:23.013 -04:00 [信息]渲染登出页面

当我调用/ revocation端点时,IdentityServer日志会显示:

  

Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:11:14.822 -04:00 [信息] CORS请求   路径:" / connect / r evocation"来自原产地:   "铬 - 延伸:// fhbjgbiflinjbdggehcddcbncdddomop"   Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:11:14.864 -04:00 [信息]已配置AllowedOrigins   和起源" c hrome-extension:// fhbjgbiflinjbdggehcddcbncdddomop"是   不允许使用Sam.Web.MicroServices.IdentityService.vshost.exe   信息:0:20​​16-07-13 04:11:14.906 -04:00 [信息]退出;   origin" chrome-extension:// fhb jgbiflinjbdggehcddcbncdddomop"不是   允许Sam.Web.MicroServices.IdentityService.vshost.exe信息:   0:2016-07-13 04:11:14.941 -04:00 [信息] CorsPolicyService做到了   不允许来源Sam.Web.MicroServices.IdentityService.vshost.exe   信息:0:20​​16-07-13 04:11:15.005 -04:00 [信息]开始   令牌撤销请求2016-07-13 04:11:15.063 -04:00 [Debug]启动   客户端验证2016-07-13 04:11:15.064 -04:00 [Debug]开始解析   for X.509 certificate 2016-07-13 04:11:15.065 -04:00 [Debug] client_id   在帖子正文中找不到2016-07-13 04:11:15.066 -04:00 [调试]开始   在帖子正文中解析秘密2016-07-13 04:11:15.067 -04:00 [调试]   发帖体内没有秘密发现2016-07-13 04:11:15.068 -04:00 [调试]   开始解析基本身份验证密码   Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:11:15.069 -04:00 [信息] Parser没有发现任何秘密   Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:11:15.124 -04:00 [信息]未发现客户密码   Sam.Web.MicroServices.IdentityService.vshost.exe信息:0:   2016-07-13 04:11:15.175 -04:00 [信息]返回错误:   invalid_client

1 个答案:

答案 0 :(得分:1)

您在注销时收到错误的原因是您在id_token_hint参数中传回了一个访问令牌。此参数需要在登录时发给您的身份令牌(假设您使用的是OpenID Connect)。

如果您只使用OAuth,那么endsession端点不适合您。要撤消访问令牌,您需要使用revocation endpoint。然后,这将从您的数据库中删除令牌。

您从吊销端点收到的错误似乎与其他问题有关(看起来您不是在提供客户端ID和密码)。