Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Probleem REST Assured authenticationiga märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
arvutisõber
HV veteran
arvutisõber

liitunud: 01.08.2002




sõnum 31.07.2019 23:22:44 Probleem REST Assured authenticationiga vasta tsitaadiga

Äkki keegi on kasutanud ja oskab palun aidata?


   @Test
   public void testLoginPreemptiveBasicHV()
   {
      RestAssured.baseURI = "https://www.hinnavaatlus.ee";
      
      RequestSpecification auth = given().auth().preemptive().basic("xxxxusername", "xxxxpassword"); // given().auth().basic("xxxxusername", "xxxxpassword"); ei toimi samuti
      
      auth.when().get("https://sso.hinnavaatlus.ee/site/login/").then().assertThat().statusCode(200);
       
      String sso_csrf = auth.when().post("https://sso.hinnavaatlus.ee/site/login/").cookie("_sso_csrf");
      System.out.println("_sso_csrf: " + sso_csrf);
      
      String phpsessid = given().when().post("https://www.hinnavaatlus.ee").cookie("PHPSESSID");
      System.out.println("PHPSESSID: " + phpsessid);
      
      ResponseBody responseBody = auth.when().get("https://foorum.hinnavaatlus.ee/").thenReturn().body();
      
      assertFalse("Assert that body doesn`t contain text 'logi sisse....'", responseBody.print().contains("logi sisse, et näha oma privaatsõnumeid"));
   }


Tulemus:


java.lang.AssertionError: Assert that body doesn`t contain text 'logi sisse....'
   at org.junit.Assert.fail(Assert.java:88)
   at org.junit.Assert.assertTrue(Assert.java:41)
   at org.junit.Assert.assertFalse(Assert.java:64)
   at RestAssuredAuth.testLoginBasicHV(RestAssuredAuth.java:60)


Ehk ei saa seda sisselogimist päris paljude lehekülgede peal tööle, aga mingi Jenkinsi demo saidiga see Preemptive Basic authentication muidu töötas küll.

_________________
...
Kommentaarid: 55 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 53
tagasi üles
vaata kasutaja infot saada privaatsõnum
Renka
HV Guru
Renka

liitunud: 01.04.2002



Autoriseeritud ID-kaardiga

sõnum 31.07.2019 23:28:17 vasta tsitaadiga

HVs ei ole HTTP basic authi ...

ega ka REST API't.

_________________
There is no place like 127.0.0.1
Kommentaarid: 71 loe/lisa Kasutajad arvavad:  :: 2 :: 1 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
arvutisõber
HV veteran
arvutisõber

liitunud: 01.08.2002




sõnum 01.08.2019 21:23:00 vasta tsitaadiga

Renka kirjutas:
HVs ei ole HTTP basic authi ...

ega ka REST API't.


Tänud vastuse eest!

Aga äkki keegi teab, et kas selline asi nagu REST Assured Form Authentication peaks idee poolest töötama kõigi login lehekülgedega?

https://www.baeldung.com/rest-assured-authentication kirjutas:


4. Using Form Authentication

Many services provide an HTML form for the user to authenticate by filling in the fields with their credentials.

When the user submits the form, the browser executes a POST request with the information.

1 given().auth()
2 .form(
3 "user1",
4 "user1Pass",
5 new FormAuthConfig("/perform_login", "username", "password"))
6 // ...

Apart from these basic configurations, REST Assured ships with functionality to:

detect or indicate a CSRF token field in the webpage
use additional form fields in the request
log information about the authentication process

Normally, the form indicates the endpoint that it’ll call with its action attribute, and each input field corresponds with a form parameter sent in the request.

If the login form is simple enough and follows these rules, then we can rely on REST Assured to figure out these values for us:

1 given().auth()
2 .form("user1", "user1Pass")
3 .when()
4 // ...

This is not an optimal approach, anyway, since REST Assured needs to perform an additional request and parse the HTML response to find the fields.

We also have to keep in mind that the process can still fail, for example, if the webpage is complex, or if the service is configured with a context path that is not included in the action attribute.

Therefore, a better solution is to provide the configuration ourselves, indicating explicitly the three required fields:

1 given().auth()
2 .form(
3 "user1",
4 "user1Pass",
5 new FormAuthConfig("/perform_login", "username", "password"))
5 // ...

Apart from these basic configurations, REST Assured ships with functionality to:

detect or indicate a CSRF token field in the webpage
use additional form fields in the request
log information about the authentication process


Selline form action parameeter on HV login lehel kenasti olemas:




   @Test
   public void testLoginFormHV()
   {
      RestAssured.baseURI = "https://www.hinnavaatlus.ee";
      
      RequestSpecification auth = given().auth().form("userxxxx", "passswordxxxx",
            new FormAuthConfig("/site/login/", "username", "password").withLoggingEnabled());
       
      auth.when().get("https://sso.hinnavaatlus.ee/site/login/").then().assertThat().statusCode(200);
      
      ResponseBody responseBody = auth.when().get("https://foorum.hinnavaatlus.ee/").thenReturn().body();
      
      assertFalse("Assert that body doesn't contain text 'logi sisse....'", responseBody.print().contains("logi sisse, et näha oma privaatsõnumeid"));
   }


Request method:   POST
Request URI:   https://sso.hinnavaatlus.ee/site/login/
Proxy:         <none>
Request params:   <none>
Query params:   <none>
Form params:   username=userxxxx
            password=passswordxxxx
Path params:   <none>
Headers:      Accept=*/*
            Content-Type=application/x-www-form-urlencoded; charset=ISO-8859-1
Cookies:      <none>
Multiparts:      <none>
Body:         <none>


java.lang.AssertionError: Assert that body doesn't contain text 'logi sisse....'
   at org.junit.Assert.fail(Assert.java:88)
   at org.junit.Assert.assertTrue(Assert.java:41)
   at org.junit.Assert.assertFalse(Assert.java:64)
   at RestAssuredAuth.testLoginFormHV(RestAssuredAuth.java:75)
...
Manus


_________________
...
Kommentaarid: 55 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 53
tagasi üles
vaata kasutaja infot saada privaatsõnum
julmu
HV kasutaja
julmu

liitunud: 20.12.2004




sõnum 03.08.2019 20:38:21 vasta tsitaadiga

Kuna "Form params" juures pole "_sso_csrf" väärtust näha, siis tõenäoliselt seal vormil olevat CSRF välja automaatselt ei tuvastatud, vaid pead selle välja nime eraldi ette andma.
S.t proovi nt
new FormAuthConfig("/site/login/", "username", "password").withLoggingEnabled().withCsrfFieldName("_sso_csrf")
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Probleem REST Assured authenticationiga
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.