【问题标题】:Problems with HttpBuilder-NG basic authentication for a step definition步骤定义的 HttpBuilder-NG 基本身份验证问题
【发布时间】:2017-10-16 21:26:29
【问题描述】:

我在使用 Gradle、Groovy 和 Junit 为 Cucumber 功能步骤定义实现 HttpBuilder-NG 基本身份验证时遇到问题。我已经使用 Behat/PHP 成功实现了这个步骤定义。我还使用 Postman 验证了测试。

这里是 build.gradle 文件

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

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.4.12'
    compile 'io.github.http-builder-ng:http-builder-ng-core:1.0.2'
    testCompile 'junit:junit:4.12'
    testCompile 'info.cukes:cucumber-groovy:1.2.5'
    testCompile 'info.cukes:cucumber-junit:1.2.5'
}

github API /user/repos 路径需要身份验证才能检索用户的存储库信息,但 Get 返回未经授权的异常。如果我省略了路径,我会成功,但基本 URL 不需要身份验证。这是 Groovy 代码:

import static cucumber.api.groovy.EN.*
import cucumber.api.PendingException
import static groovyx.net.http.HttpBuilder.configure
import static groovyx.net.http.util.SslUtils.ignoreSslIssues

Given(~/^I am an authenticated user$/) { ->
    def github = configure {
        ignoreSslIssues execution
        request.uri = 'https://api.github.com'
    request.auth.basic('githubUser', 'githubPassword', false)
    }.get {
        request.uri.path = '/user/repos'
    }
    assert github != null
    println github.dump()
}

这是我得到的异常 (401):

groovyx.net.http.HttpException: Unauthorized
    at groovyx.net.http.NativeHandlers.failure(NativeHandlers.java:69)
    at groovyx.net.http.HttpConfigs$BaseHttpConfig$$Lambda$9/15235276.apply(Unknown Source)
    at groovyx.net.http.HttpBuilder$ResponseHandlerFunction.apply(HttpBuilder.java:2305)
    at groovyx.net.http.JavaHttpBuilder$Action.lambda$execute$2(JavaHttpBuilder.java:168)
    at groovyx.net.http.JavaHttpBuilder$Action$$Lambda$56/33475769.call(Unknown Source)
    at groovyx.net.http.JavaHttpBuilder$ThreadLocalAuth.with(JavaHttpBuilder.java:331)
    at groovyx.net.http.JavaHttpBuilder$Action.execute(JavaHttpBuilder.java:122)
    at groovyx.net.http.JavaHttpBuilder.createAndExecute(JavaHttpBuilder.java:374)
    at groovyx.net.http.JavaHttpBuilder.doGet(JavaHttpBuilder.java:381)
    at groovyx.net.http.HttpBuilder$$Lambda$25/32560218.apply(Unknown Source)
    at groovyx.net.http.HttpObjectConfigImpl.nullInterceptor(HttpObjectConfigImpl.java:47)
    at groovyx.net.http.HttpObjectConfigImpl$Exec$$Lambda$23/7279823.apply(Unknown Source)
    at groovyx.net.http.HttpBuilder.get(HttpBuilder.java:346)
Gradle Test Executor 191 finished executing tests.
    at groovyx.net.http.HttpBuilder.get(HttpBuilder.java:1297)
    at groovyx.net.http.HttpBuilder$get$0.call(Unknown Source)
    at repo-create_steps$_run_closure1.doCall(repo-create_steps.groovy:7)
    at ?.Given I am an authenticated user(repo-create.feature:3)

【问题讨论】:

  • 请添加您在 Postman 中使用的配置,作为它工作的示例。
  • 另外,您可能会考虑尝试使用apacheokhttp 客户端实现而不是core,看看是否只有一个客户端存在问题。
  • 最后,我假设 githubUsergithubPassword 被替换为代码中的实际值...只是检查 ;-)
  • 您确定他们的 API 接受 BASIC 身份验证 (developer.github.com/v3/guides/basics-of-authentication) 我看到的所有内容都需要 OAUTH。请指出您正在使用的文档?
  • 1.这是包含步骤定义的集合的链接。documenter.getpostman.com/view/2835930/… - 请参阅第二个操作(第一个 Get)。

标签: httpbuilder-ng


【解决方案1】:

看起来 GitHub 确实提供了 BASIC 支持 (https://developer.github.com/v3/auth/),但它是非标准的,他们建议自己创建 Authorization 标头,看起来像这样:

@Grab('io.github.http-builder-ng:http-builder-ng-core:1.0.2')

import static groovyx.net.http.HttpBuilder.configure
import static groovyx.net.http.util.SslUtils.ignoreSslIssues

def username = 'blah'
def password = 'blah'
def creds = "$username:$password".bytes.encodeBase64()

def github = configure {
    ignoreSslIssues execution
    request.uri = 'https://api.github.com'
    request.headers['Authorization'] = "Basic $creds"
}.get {
    request.uri.path = '/user/repos'
    response.failure { fs, obj->
        println "Status: ${fs.statusCode}"
        fs.headers.each { h->
            println h
        }
    }
}

println github.dump()

但是,这会带来一个您可能不会遇到的问题。我在我的帐户上启用了 2 因素身份验证,因此我得到了 X-GitHub-OTP: required; :2fa-type 标头(根据上面链接的文档)。如果你没有 2-factor,你应该有你需要的。

我添加了failure 处理程序以获取有关失败案例的一些额外信息 - 解决方案不需要它。

【讨论】:

  • 这适用于所有三个客户端实现(core、apache 和 okhttp)。我感谢失败案例的附加代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 2018-12-20
  • 2021-05-17
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多