Versent / saml2aws

CLI tool which enables you to login and retrieve AWS temporary credentials using a SAML IDP
https://github.com/Versent/saml2aws
MIT License
2.07k stars 563 forks source link

Non-incognito browser session #979

Open project-administrator opened 1 year ago

project-administrator commented 1 year ago

By default, saml2aws opens an incognito browser session. It would be great to specify the browser provider options to run the non-incognito session to retain cookies between the browser runs. I could create a PR with these changes, but I have not found the corresponding playwright browser launch options https://github.com/Versent/saml2aws/blob/master/pkg/provider/browser/browser.go#L32

Is the browser provider session opened as incognito on purpose, or is it the default setting of playwright package? ...

project-administrator commented 1 year ago

Found the way around this issue by using the Chrome browser + this extension (source) instead of the saml2aws.

bsamsom commented 8 months ago

I was messing around with the code a bit locally.

and found if you swap this:

launchOptions := playwright.BrowserTypeLaunchOptions{
    Headless: playwright.Bool(cl.Headless),
}

to

launchOptions := playwright.BrowserTypeLaunchPersistentContextOptions{
    Headless: playwright.Bool(cl.Headless),
}

and this

browser, err := browserType.Launch(launchOptions)

to

browser, err := browserType.LaunchPersistentContext("~/Library/Application Support/Google/Chrome/Default", launchOptions)

it will open chrome in a non incognito browser session, but doesnt load in your chrome profile. That should at least be a start for someone to pickup and work on this.

Note: ~/Library/Application Support/Google/Chrome/Default is the chrome data dir on chrome for mac

bsamsom commented 8 months ago

both

launchOptions := playwright.BrowserTypeLaunchOptions{
    Headless: playwright.Bool(cl.Headless),
}

and

launchOptions := playwright.BrowserTypeLaunchPersistentContextOptions{
    Headless: playwright.Bool(cl.Headless),
}

let you pass in chrome args: https://peter.sh/experiments/chromium-command-line-switches/

launchOptions := playwright.BrowserTypeLaunchPersistentContextOptions{
    Headless: playwright.Bool(cl.Headless),
    Args:     []string{"--profile-directory=Profile 2"},
}

i tried passing in a bunch of options but couldnt get it to work as you would expect in a Non-incognito browser session

timharris777 commented 5 months ago

My PR solves the issue: https://github.com/Versent/saml2aws/pull/1267

It still uses the private browsing window, but after first login your storageState (cookies/session-data) is re-used. I found this more reliable than trying to use playwright.BrowserTypeLaunchPersistentContextOptions