How to set cookieJar in JMeter - groovy

In K6, I am setting cookieJar as below
const jar = http.cookieJar();
jar.set('https://auth.mygateid.test', 'oktaStateToken', oktaStateToken);
Is there a way to do this in JMeter ? Is it really required in Jmeter?

Normally in JMeter it's sufficient just to add a HTTP Cookie Manager to your Test Plan and it will automatically take care of all incoming cookies, i.e. extract values from the Set-Cookie header of the response and add them to Cookie header of the request if the cookie is valid (domain/path match, not expired, etc.)
It is also possible to manually add cookie if you need:
More information: Using the HTTP Cookie Manager in JMeter

Related

Response header Set-Cookie doesn't store cookies in browser

I'm setting 2 cookies in response from backend to the browser.
One that is secure HTTPOnly (it's refreshToken) and the other one without those parameters so it's accessible to JavaScript (carrying information about refreshToken is set and when it expires).
Cookies in response:
Neither of those two is set in browser. I studied all about cookies and I'll be honest, I'm lost here and need your help.
At first it was working very well on my localhost environment (backend on localhost:8080, frontend on localhost:3000).
Then I made deploy and there it was NOT working.
I tested again on localhost and I checked "Disable cache" to prevent unwanted behaviour and it is not working even there.
I'll mention that I'm using CORS, not sure if that can may interfere:
I tested this both in Chrome and Firefox.
I FINALY figured it out. Cookies are valid. The answer is to set withCredentials = true both in frontend and backend.
First I thought the parameter withCredentials on frontend is used only when we want to send our credentials hidden in secure HttpOnly cookies to which we don't have access to but browser does.
Apparently it is also used when we want to set cookies from response. Link to docs.
responses from a different domain cannot set cookie values for their own domain unless withCredentials is set to true before making the request
Secondly, we also have to add withCredentials on backend to CorsFilter (in Spring boot) otherwise we get CORS error.
CorsConfiguration()
.apply {
allowedOrigins = listOf(uiUrl)
allowedHeaders = listOf("*")
allowedMethods = listOf("*")
allowCredentials = true
}

Is there any way to remove the cookie from the request

I want to request twitterApi, but chrome add cookie automatically on request Header. it caused me to fail authentication using token.
I try to use webRequest/webRequestBlocking to add chrome.webRequest.onBeforeSendHeaders listener,and remove cookie.But can't find cookie and remove.

How to get response header for same key values

I try to extract data out of a website using requests.
I am particularly interested in response headers for key "Set-cookie".
However, when I check in Chrome Developer Tool there are multiple values for the same key in response header.
I know in requests I just need to issue response.headers to get all headers.
How to get all values if I have multiple same keys like "Set-Cookie" ?
To retrieve all cookies from a requests response, use cookies attribute.
import requests
res = requests.get("http://example.com")
for cookie in res.cookies:
print(cookie.name, cookie.value)

Cookies not sent on redirect

I am building a react web application with a separate back-end express api that manages all the calls, including passporting and setting cookies. Let's call the back-end service 'api.com' and the front-end service 'react.com'. I'm using passporting with an existing provider (spotify) and after the authorization succeeds, a cookie is set on api.com. The idea is that the user interacts with react.com and requests are made to api.com via a proxy.
If I'm just testing in my browser and I make a call to api.com/resource, the cookie is automatically set. I know this because I've added a bit of logging and also because the requests that require authorization are succeeding via the cookie.
However, when I make calls to api.com from react.com via the proxy, the cookie is not set. Is this expected behavior when proxying? It seems odd that the cookie is set when I call api.com directly, but it is not set when it is redirected. Is there a way around this? My thought would be to communicate the cookie from api.com to react.com, save it there, and send it on all subsequent requests, but that seems overkill. I'm also wondering if maybe I should be setting the cookie on react.com instead of api.com.
I've tried in both Firefox and Chrome, and if it makes a difference, I'm using axios for the requests on react.com.
const request = axios({
method:'get',
url:'/api/resource'
});
This gets proxied as follows (still on react.com), using express-http-proxy:
app.use('/', proxy('api.com', {
filter: (req) => {
return (req.path.indexOf('/api') === 0);
}
}));
But once this hits api.com, any authentication fails, because the cookie is not present.
Any help is appreciated
As far as I have understood your question, I think you're not considering that cookies are set to host name.
So in the first case the hostname is same and its okay, but in the second case the browser's cookies are not set for react.com
So trying to set the cookie on react.com should work.
I would have asked for a clarification using a comment but I don't have enough reputation for that yet.

read cookie age from http request in server side

req.cookies :
When using cookie-parser middleware, this property is an object that
contains cookies sent by the request. If the request contains no
cookies, it defaults to {}.
// Cookie: name=tj
req.cookies.name
// => "tj"
This is what i found in the official documentation , However, it is expected that req.cookies.name returns an object contains all info about cookie , Not ONLY STRING which is the value of cookie .
Expected
req.cookies.name ==> {value:"e3Lfdsd3pd1...er",expiration:...,..:...}
Actual
req.cookies.name ==> "e3Lfdsd3pd1...er"
How to retrieve other info of cookies than its value using request object ?
Is there something ready in express or cookie-parse, Or have i to use Nodejs built-in API?
You can not access this data because it's simply not there.
The browser sends only the key-value pairs.
expires and max-age are local informations for the browser only and will not be committed to a web server in general.
You can set those attributes on cookie creation on the server, also you can overwrite them later (e.g. for invalidating), but I'm afraid you can't read the values of those attributes.

Resources