std::string OktaCredentialsProvider::get_session_token()

in src/authentication/okta/okta.cc [64:101]


std::string OktaCredentialsProvider::get_session_token() {
    // Send request for session token
    std::string url = get_session_token_url();
    LOG(INFO) << "Got OKTA Session Token URL: " << url;
    std::shared_ptr<Aws::Http::HttpRequest> req = Aws::Http::CreateHttpRequest(
        url, Aws::Http::HttpMethod::HTTP_POST, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
    Aws::Utils::Json::JsonValue json_body;
    json_body.WithString("username", std::string(cfg.idp_username))
            .WithString("password", std::string(cfg.idp_password));
    Aws::String json_str = json_body.View().WriteReadable();
    Aws::String json_len = Aws::Utils::StringUtils::to_string(json_str.size());
    req->SetContentType("application/json");
    req->AddContentBody(Aws::MakeShared<Aws::StringStream>("", json_str));
    req->SetContentLength(json_len);
    std::shared_ptr<Aws::Http::HttpResponse> response = http_client->MakeRequest(req);

    // Check resp status
    if (response->GetResponseCode() != Aws::Http::HttpResponseCode::OK) {
        LOG(WARNING) << "OKTA request returned bad HTTP response code: " << response->GetResponseCode();
        if (response->HasClientError()) {
            LOG(WARNING) << "HTTP Client Error: " << response->GetClientErrorMessage();
        }
        return "";
    }

    // Get response session token
    Aws::Utils::Json::JsonValue json_val(response->GetResponseBody());
    if (!json_val.WasParseSuccessful()) {
        LOG(WARNING) << "Unable to parse JSON from response";
        return "";
    }
    Aws::Utils::Json::JsonView json_view = json_val.View();
    if (!json_view.KeyExists("sessionToken")) {
        LOG(WARNING) << "Could not find session token in JSON";
        return ""; 
    }
    return json_view.GetString("sessionToken");
}