Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 当您同时允许匿名访问和登录用户时,如何处理匿名登录尝试?_Scala_Authentication_Challenge Response_Www Authenticate - Fatal编程技术网

Scala 当您同时允许匿名访问和登录用户时,如何处理匿名登录尝试?

Scala 当您同时允许匿名访问和登录用户时,如何处理匿名登录尝试?,scala,authentication,challenge-response,www-authenticate,Scala,Authentication,Challenge Response,Www Authenticate,我有一个允许匿名访问和命名用户帐户的框架。我正在某个URL上公开OData资源。这样配置时,匿名用户可以看到部分资源,登录用户(通过基本身份验证)可以看到更多 我面临的问题是,一些OData客户端(如Excel)最初会尝试匿名访问OData资源,即使您确实提供了凭据。只有在失败时,他们才会使用提供的凭据。我的理解是,这是因为有很多方法可以登录,一些客户总是先尝试最基本的选项。但这会阻止他们实际看到更多的数据,因为他们从不使用提供的凭据,而且在资源允许匿名访问时也不会遇到身份验证挑战 有没有办法解

我有一个允许匿名访问和命名用户帐户的框架。我正在某个URL上公开OData资源。这样配置时,匿名用户可以看到部分资源,登录用户(通过基本身份验证)可以看到更多

我面临的问题是,一些OData客户端(如Excel)最初会尝试匿名访问OData资源,即使您确实提供了凭据。只有在失败时,他们才会使用提供的凭据。我的理解是,这是因为有很多方法可以登录,一些客户总是先尝试最基本的选项。但这会阻止他们实际看到更多的数据,因为他们从不使用提供的凭据,而且在资源允许匿名访问时也不会遇到身份验证挑战

有没有办法解决这个问题,允许匿名访问并在可能的情况下正确发送身份验证质询?当客户端确实有凭据但最初不提供凭据时,是否会发送一些标头

一些(scala)代码使其更具体:

  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")
正如您所看到的,当允许匿名访问时,从不发送质询

编辑:我们进行了调查,该请求的标题中似乎没有任何特殊信息表明这是一次初始尝试,在发送身份验证质询时会导致另一个请求,而不仅仅是另一次匿名登录尝试。我们现在不知道如何继续。