Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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
Java 放心承载认证_Java_Api_Authentication_Rest Assured_Bearer Token - Fatal编程技术网

Java 放心承载认证

Java 放心承载认证,java,api,authentication,rest-assured,bearer-token,Java,Api,Authentication,Rest Assured,Bearer Token,我对使用Rest-Assured、Java和Api测试还不熟悉,所以请对我温柔一点。当我使用rest assured测试使用承载身份验证的api时,测试失败导致:- java.net.ConnectException:连接被拒绝:连接 我知道这个问题可能与身份验证有关,但我不确定如何使用“Bearer”。我四处搜索,认为我需要用我的用户名和密码提出一个初始请求。然后获取一个令牌,用于承载身份验证。 请有人能帮我举一个简单的例子吗 我的代码是 import com.jayway.restassur

我对使用Rest-Assured、Java和Api测试还不熟悉,所以请对我温柔一点。当我使用rest assured测试使用承载身份验证的api时,测试失败导致:- java.net.ConnectException:连接被拒绝:连接

我知道这个问题可能与身份验证有关,但我不确定如何使用“Bearer”。我四处搜索,认为我需要用我的用户名和密码提出一个初始请求。然后获取一个令牌,用于承载身份验证。 请有人能帮我举一个简单的例子吗

我的代码是

import com.jayway.restassured.RestAssured;
import static com.jayway.restassured.RestAssured.*;
import static org.hamcrest.Matchers.hasItem;

@BeforeTest
    public void setUp() {
        RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
        RestAssured.authentication =   preemptive().basic("username","password");

}

@Test
public void successfulTest() {
    given()
            .contentType("application/json; charset=UTF-8");

    when().

            get("http://mydomain/testpath/Id=2").
    then().
            statusCode(200);

}

我的Cucumber步骤定义如下所示:

    // Class variables
    private String token_resource = "/yourApp/oauth/token?username=";
    private String endpoint_rest="https://your.app.domain.com/";
    private String acessToken;

    @When("^user gets access token using userId \"(.+)\" and password \"(.+)\"$")
public void getAccessToken(String userName, String password){
    RequestSpecification requestSpec = RestAssured.with();
    requestSpec.given().contentType("application/json");
    requestSpec.headers("Authorization", "Basic  your-string-here");
    Response response = requestSpec.post(endpoint_rest + token_resource + userName + "&password=" + password + "&client_id=yourApp&grant_type=password");
    String responseMsg = response.asString();
    System.out.println(">> responseMsg=" + responseMsg);
    assertTrue("Missing access token",responseMsg.contains("access_token"));
    System.out.println(">> Get Access token RESPONSE: " + responseMsg);

    DocumentContext doc = JsonPath.parse(responseMsg);
    acessToken= doc.read("access_token");

    System.out.println(" >> doc.read access_token= " + acessToken);  
}
这在很大程度上取决于端点的编码方式

当我想学习这种东西的时候,我会去休息和寻找

例如。

如果错误是“连接被拒绝”,则听起来更像是网络问题,而不是身份验证问题。基本上,您还没有达到使用该服务对客户端进行身份验证的程度。 您可以检查您的服务是否在80以外的其他端口上运行。如果是这种情况,只需在发送请求之前提供端口:

given().port(your_port_number)

您可以使用一个更可视化的rest客户端应用程序来尝试您的请求,以确保在将其放入代码之前它实际工作。“邮递员”可能是一个很好的候选人。

为了获得持票人代币,您可以使用此代码授权您的请求:

Response response =
      given()
          .headers(
              "Authorization",
              "Bearer " + bearerToken,
              "Content-Type",
              ContentType.JSON,
              "Accept",
              ContentType.JSON)
          .when()
          .get(url)
          .then()
          .contentType(ContentType.JSON)
          .extract()
          .response();
PreemptiveBasicAuthScheme authScheme = new PreemptiveBasicAuthScheme();
authScheme.setUserName("login");
authScheme.setPassword("password");
RestAssured.authentication = authScheme;
在您获得令牌后,通过以下方式将其发送到您的请求中:

response = given().auth().oauth2(token).get("http://mydomain/testpath/Id=2");