【问题标题】:basic auth http-builder-ng基本身份验证 http-builder-ng
【发布时间】:2017-07-11 23:30:44
【问题描述】:

Basic Auth 不适用于 http-builder-ng - ng 未传递授权请求?

build.gradle

group 'org.vinay.rest'
version '1.0-SNAPSHOT'

apply plugin: 'groovy'
apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    // https://mvnrepository.com/artifact/io.github.http-builder-ng/http-builder-ng-core
    testRuntime group: 'io.github.http-builder-ng', name: 'http-builder-ng-core', version: '0.17.0'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.4'
    testCompile group: 'ch.qos.logback', name: 'logback-classic', version:'1.0.13'
}

GetD2LUserBySourcedIdSpec.groovy

import spock.lang.Specification
import groovyx.net.http.HttpBuilder

/**
 * Created by e5017581 on 11/07/2017.
 */
class GetD2LUserBySourcedIdSpec  extends Specification {
   def "test get /users call with d2lSourced Id"() {
       given:

       def httpClient = HttpBuilder.configure {
           request.uri = 'http://esbvucmv5.vu.edu.au/D2L/2.0'
           //request.headers['Authorization'] = 'Basic ZDJscnM6MTRkMmxycw=='
           //request.headers['Content-Type'] = "application/json"
           request.auth.basic'd2lrs', '14d2lrs'

       }
       when:
       def user = httpClient.get {
           //request.auth.basic 'd2lrs', '14d2lrs'
           //request.headers['Authorization'] = 'Basic ZDJscnM6MTRkMmxycw=='
           request.uri.path = '/users/'
           request.uri.query = [sourcedId: 's4504565']
       }
       then:
       println user.dump()
       null != user
   }
}

http-logs:

com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 "GetD2LUserBySourcedIdSpec,test get /users call with d2lSourced Id"
15:41:36,714 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.groovy] at [file:/C:/Users/e5017581/IdeaProjects/http-builder-ng2/build/resources/test/logback.groovy]
15:41:36,935 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@6d07a63d - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
15:41:36,946 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@6d07a63d - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
15:41:36,947 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@6d07a63d - Naming appender as [CONSOLE]
15:41:37.100 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Request-Header: Accept-Encoding -> [gzip, deflate]
15:41:37.306 [main] DEBUG g.net.http.JavaHttpBuilder.content - Response-Body: null
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: Date -> Tue, 11 Jul 2017 05:41:37 GMT
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: Content-Type -> text/plain
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: Content-Length -> 42
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: Connection -> keep-alive
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: Server -> Mule/SNAPSHOT
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: WWW-Authenticate -> Basic realm="realm"
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: http.status -> 401
15:41:37.307 [main] DEBUG g.net.http.JavaHttpBuilder.headers - Response-Header: Set-Cookie -> VUpersist=rd2480o00000000000000000000ffff0a4c0016o80; path=/; Httponly

groovyx.net.http.HttpException: Unauthorized
at groovyx.net.http.NativeHandlers.failure(NativeHandlers.java:69)
at groovy.lang.Closure.call(Closure.java:423)
at groovyx.net.http.fn.ClosureBiFunction.apply(ClosureBiFunction.java:45)
at groovyx.net.http.HttpBuilder$ResponseHandlerFunction.apply(HttpBuilder.java:1834)
at groovyx.net.http.JavaHttpBuilder$Action.lambda$execute$2(JavaHttpBuilder.java:157)
at groovyx.net.http.JavaHttpBuilder$ThreadLocalAuth.with(JavaHttpBuilder.java:320)
at groovyx.net.http.JavaHttpBuilder$Action.execute(JavaHttpBuilder.java:111)
at groovyx.net.http.JavaHttpBuilder.createAndExecute(JavaHttpBuilder.java:362)
at groovyx.net.http.JavaHttpBuilder.doGet(JavaHttpBuilder.java:369)
at groovyx.net.http.HttpObjectConfigImpl.nullInterceptor(HttpObjectConfigImpl.java:45)
at groovyx.net.http.HttpBuilder.get(HttpBuilder.java:360)
at groovyx.net.http.HttpBuilder.get(HttpBuilder.java:1311)
at GetD2LUserBySourcedIdSpec.test get /users call with d2lSourced Id(GetD2LUserBySourcedIdSpec.groovy:19)


Process finished with exit code -1

【问题讨论】:

  • 您应该包括您正在使用的服务器,以及与此相关的服务器日志。
  • 我针对一个简单的 spring-boot 应用程序 (tomcat) 进行了测试,该应用程序具有 spring-security(基本和摘要),并且身份验证按预期工作。它还针对 Undertow 进行了测试。我想说他们的服务器要么不同,要么有问题——如果你发现你的服务器由于某种原因没有得到适当的支持,请随时在项目上创建一个问题。
  • 感谢您的回复,我们正在使用 mulesoft 3.8.0 企业版服务器作为 REST 端点。当我尝试使用错误凭据的邮递员时,我可以在 mule 日志中看到错误,但是当我尝试通过脚本时看不到任何日志。

标签: groovy httpbuilder-ng


【解决方案1】:

感谢@Vinay 提供的 GitHub 问题链接以及 @cjstehno(有用的 http-builder-ng 项目的创建者)的支持,我能够在调用 Mule 时完成这项工作。

通常这应该在 http-builder-ng 中工作

request.auth.basic(username, password)

但这不适用于 Mule,并且您会收到有关身份验证的神秘错误消息,如上述问题所示。

以下解决方法可以在调用 Mule 时解决此问题。

// Manually generate Base 64 encoding of username and password
String encodedAuthString = "Basic " + ("$username:$password".bytes.encodeBase64().toString())

// Set in the `HttpBuilder.configure` closure
request.headers['Authorization'] = encodedAuthString

【讨论】:

  • 谢谢。它适用于 confluence 和 jira rest api。
【解决方案2】:

当我第一次尝试这个库时,我自己也遇到了同样的问题。 URI 中不应有任何路径,只有协议和主机(和端口)

您的请求 URI 应如下所示:

request.uri = 'http://esbvucmv5.vu.edu.au'

get 调用中的路径如下所示:

request.uri.path = /D2L/2.0/users/

【讨论】:

  • 尝试了你的建议 Aaron,我仍然收到“groovyx.net.http.HttpException: Unauthorized”
  • 你是对的!我做了一个快速的 ratpack 服务器示例,在使用 curl 时,我可以清楚地看到身份验证通过了,我没有使用 http builder ng 看到它,这似乎是你应该在项目中提交的错误。
  • 如果你们中的任何一个可以在错误请求中提供一个独立的示例,我们可以看看。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 2011-11-12
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2013-09-01
  • 2011-05-08
相关资源
最近更新 更多