WSO2 身份服务器 - 并发身份验证请求
WSO2 Identity Server - concurrent authentication requests
使用 WSO2IS 5.1.0(我相信任何版本都会有这个问题)我们遇到了传入的并发身份验证请求的问题。
在两种情况下可能会发生并发身份验证请求(如我们所见):
第一:当用户尚未通过 登录表单的多个帖子 进行身份验证时。当用户没有足够的耐心并双击登录按钮(或发送垃圾邮件登录提交按钮,一些用户这样做)时,就会发生这种情况。使用自定义登录页面,我们可以对 UI 进行一些控制,并且可以防止用户发布多个帖子(通过在提交时禁用提交按钮)。
第二(这是我们看到真正问题的地方):当用户已经通过身份验证时,接收多个身份验证请求会将用户发送到 retry.do 页面并显示错误消息。
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39|[2016-10-18 11:05:39,295] ERROR {org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator} - Exception in Authentication Framework
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39|java.lang.NullPointerException
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handle(DefaultStepBasedSequenceHandler.java:105)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultAuthenticationRequestHandler.handle(DefaultAuthenticationRequestHandler.java:115)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:135)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:53)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
这与 有关。
使用 HTML5 应用程序的并发身份验证请求变得越来越普遍(访问其服务时返回 401 结果将使用身份验证请求重定向用户)。在这种情况下,在多个线程中处理相同的缓存身份验证上下文 将使身份验证上下文进入无效状态。不幸的是 - 服务提供商不在我们的控制范围内,我们当时无法强制只发送一个请求。
有什么方法可以在处理之前同步/锁定身份验证上下文吗?
WSO2 产品尚不支持并发用户登录限制。这已作为改进 [1] 提出,将来可能会包含在内。
使用 WSO2IS 5.1.0(我相信任何版本都会有这个问题)我们遇到了传入的并发身份验证请求的问题。
在两种情况下可能会发生并发身份验证请求(如我们所见):
第一:当用户尚未通过 登录表单的多个帖子 进行身份验证时。当用户没有足够的耐心并双击登录按钮(或发送垃圾邮件登录提交按钮,一些用户这样做)时,就会发生这种情况。使用自定义登录页面,我们可以对 UI 进行一些控制,并且可以防止用户发布多个帖子(通过在提交时禁用提交按钮)。
第二(这是我们看到真正问题的地方):当用户已经通过身份验证时,接收多个身份验证请求会将用户发送到 retry.do 页面并显示错误消息。
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39|[2016-10-18 11:05:39,295] ERROR {org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator} - Exception in Authentication Framework
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39|java.lang.NullPointerException
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handle(DefaultStepBasedSequenceHandler.java:105)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultAuthenticationRequestHandler.handle(DefaultAuthenticationRequestHandler.java:115)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:135)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:53)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
FINEST|6940/0|Service WSO2IS510|16-10-18 11:05:39| at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
这与
使用 HTML5 应用程序的并发身份验证请求变得越来越普遍(访问其服务时返回 401 结果将使用身份验证请求重定向用户)。在这种情况下,在多个线程中处理相同的缓存身份验证上下文 将使身份验证上下文进入无效状态。不幸的是 - 服务提供商不在我们的控制范围内,我们当时无法强制只发送一个请求。
有什么方法可以在处理之前同步/锁定身份验证上下文吗?
WSO2 产品尚不支持并发用户登录限制。这已作为改进 [1] 提出,将来可能会包含在内。