Как использовать CF-клиент с токеном пользователя E2E
Я хочу использовать библиотеку go-cfclient для подключения к Cloud Foundry и проверки приложений и т.д.
Мне удалось подключиться к Java/Node/Go, используя явный пароль пользователя в коде.
Теперь я хочу, чтобы имитировать сценарий с использованием токена, то есть вместо использования моего пароля, используйте мой токен пользователя для имитации соединения.
Как я могу добиться такого моделирования?
Предпочтительно в go-cfclient или Node.
Обновить
Мне нужен реальный пример E2E с маркером CF, в котором пользователь использует некоторый примерный пользовательский интерфейс и, возможно, предоставляет некоторые учетные данные в первый раз, но все последующие запросы должны работать только с маркером CF.
Мне нужен этот пример в Голанге.
Ответы
Ответ 1
Вы можете найти типичную последовательность обработки маркера OAuth2 для CF из приведенной ниже ссылки. Для использования этого токена для другого вызова API вы также можете обратиться к другим тестовым примерам.
https://github.com/cloudfoundry-community/go-cfclient/blob/a0a191bdc19a7a7189c050444aeaf20d2a125875/client_test.go#L117
Во всяком случае, это токен OAuth2, истекший после истечения срока его действия. Вы не можете избежать логина с пользователем /pass, если вы не обновите его в течение срока действия.
ОБНОВЛЕНО
Вы уже сказали, что можете войти в систему с именем пользователя и паролем, поэтому вам нужно просто получить токен с вызовом API для него. что-то вроде:
c := &Config{
ApiAddress: myApiAddress,
Username: "foo",
Password: "bar",
}
client, err1 := NewClient(c)
if err1 != nil {
// error handling for connection failure
}
// you already reach here. right?
token, err2 := client.GetToken()
if err2 != nil {
// error handling for token retreive failure
}
// just do what you want with token
вы можете найти, что происходит под капотом, проверив источник: https://github.com/cloudfoundry-community/go-cfclient/blob/a0a191bdc19a7a7189c050444aeaf20d2a125875/client.go#L375
для получения дополнительной информации jsut попытается распечатать структуру client
:
fmt.Printf("client: %v\n", client)
то я думаю, вы можете найти больше информации.
Ответ 2
Я всегда хотел бы написать Wrapper-Script
используя Powershell
или в Bash
scripting Language
Ваш CF-CLI
оставляет всю регистрационную информацию в ~\.cf\config.json
и чтение этого языка скрипта очень простое и не требует больших усилий по программированию.
В моем случае я использовал это для переключения между разными основаниями. Скрипт My Powershell выполнит эту команду ./cfwrapper switch
Function SwitchFoundation () {
Write-Host 'Which Foundation You would like to Switch ??''n
$foundationNumber = FoundationPrompt
$foundationIndex = $foundationNumber-1
$foundations = $foundationsJsonSettings
$foundation = $foundations[$foundationIndex]
if ($foundation -ne $null) {
if (Test-Path $configPath$foundationNumber) {
Write-Host 'You are now getting Switched to another Foundation. Please wait for a moment''n
CopyConfig ($foundationNumber) ('reverse')
cf target
}else {
Write-Host 'Your login to this Foundation is not found. Kindly do a Fresh login below''n
CFLoginSSOCommand ($foundationNumber) ($foundation.api_url)
}
} else {
Write-Host 'Foundation Number is wrong. Please retry..'
}
}
Function CFLoginSSOCommand ($foundationNumber,$apiUrl) {
Write-Host 'Logout command will be executed blankly to flush out all your current Logins'
cf logout
cf login --sso -a $apiUrl
CopyConfig($foundationNumber)
}
Function CopyConfig($foundationNumber, $flag) {
Write-Host 'Copying Config Path'
if ($flag -eq 'reverse') {
Copy-Item -Path $configPath$foundationNumber -Destination $configPath
}else {
Copy-Item -Path $configPath -Destination $configPath$foundationNumber
}
}
Короче говоря, CF-CLI имеет все необходимые команды. Все, что нам нужно, это написать простую обертку вокруг него.