Scala 当您同时允许匿名访问和登录用户时,如何处理匿名登录尝试?
我有一个允许匿名访问和命名用户帐户的框架。我正在某个URL上公开OData资源。这样配置时,匿名用户可以看到部分资源,登录用户(通过基本身份验证)可以看到更多 我面临的问题是,一些OData客户端(如Excel)最初会尝试匿名访问OData资源,即使您确实提供了凭据。只有在失败时,他们才会使用提供的凭据。我的理解是,这是因为有很多方法可以登录,一些客户总是先尝试最基本的选项。但这会阻止他们实际看到更多的数据,因为他们从不使用提供的凭据,而且在资源允许匿名访问时也不会遇到身份验证挑战 有没有办法解决这个问题,允许匿名访问并在可能的情况下正确发送身份验证质询?当客户端确实有凭据但最初不提供凭据时,是否会发送一些标头 一些(scala)代码使其更具体:Scala 当您同时允许匿名访问和登录用户时,如何处理匿名登录尝试?,scala,authentication,challenge-response,www-authenticate,Scala,Authentication,Challenge Response,Www Authenticate,我有一个允许匿名访问和命名用户帐户的框架。我正在某个URL上公开OData资源。这样配置时,匿名用户可以看到部分资源,登录用户(通过基本身份验证)可以看到更多 我面临的问题是,一些OData客户端(如Excel)最初会尝试匿名访问OData资源,即使您确实提供了凭据。只有在失败时,他们才会使用提供的凭据。我的理解是,这是因为有很多方法可以登录,一些客户总是先尝试最基本的选项。但这会阻止他们实际看到更多的数据,因为他们从不使用提供的凭据,而且在资源允许匿名访问时也不会遇到身份验证挑战 有没有办法解
val (username, password) = getAuthInfo(request)
if (username != null && password != null) {
val regularSession = integration.core.login(username, password)
logger.debug(s"Login OK: User '$username' (Number of concurrent sessions: ${integration.core.getNumberConcurrentSessions}).")
(IMxRuntimeResponse.OK, null, regularSession)
} else if (integration.configuration.getEnableGuestLogin) {
val guestSession = integration.core.initializeGuestSession
logger.debug(s"Anonymous user '${guestSession.getUser.getName}' created " +
"(Number of concurrent sessions: ${integration.core.getNumberConcurrentSessions}).")
(IMxRuntimeResponse.OK, null, guestSession)
} else {
val responseMessage = "No basic authentication in header."
logger.warn(s"Login failed: $responseMessage")
(IMxRuntimeResponse.UNAUTHORIZED, responseMessage, null)
}
周围环境以外的其他地方尝试/捕获:
if (httpStatusCode == IMxRuntimeResponse.UNAUTHORIZED)
response.addHeader("WWW-Authenticate", "Basic")
正如您所看到的,当允许匿名访问时,从不发送质询
编辑:我们进行了调查,该请求的标题中似乎没有任何特殊信息表明这是一次初始尝试,在发送身份验证质询时会导致另一个请求,而不仅仅是另一次匿名登录尝试。我们现在不知道如何继续。