SAML resume
GET {{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}
The GET /{{envID}}/saml20/resume?flowId={{flowID}} operation returns the flow back to the authorization service, to continue the processing of an authorization request after the completion of an authentication flow.
The request URL includes the ?flowId={{flowID}} parameter to pass in the flow ID. The response returns a 200 Success message, and the response data includes an encoded SAMLResponse to the user agent to be returned to the SAML requester. After receiving the SAML response, the SAML requester returns an arbitrary HTTP response to the user agent.
Query parameters
| Parameter | Description |
|---|---|
|
The ID of the specified flow. |
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff '{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}'
var options = new RestClientOptions("{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")
{
MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Get);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}"
method := "GET"
client := &http.Client {
}
req, err := http.NewRequest(method, url, nil)
if err != nil {
fmt.Println(err)
return
}
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
GET /{{envID}}/saml20/resume?flowId={{flowID}} HTTP/1.1
Host: {{authPath}}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")
.method("GET", body)
.build();
Response response = client.newCall(request).execute();
var settings = {
"url": "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}",
"method": "GET",
"timeout": 0,
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'GET',
'url': '{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}',
'headers': {
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
url = "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}"
payload = {}
headers = {
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
));
try {
$response = $request->send();
if ($response->getStatus() == 200) {
echo $response->getBody();
}
else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
}
}
catch(HTTP_Request2_Exception $e) {
echo 'Error: ' . $e->getMessage();
}
require "uri"
require "net/http"
url = URI("{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body
var request = URLRequest(url: URL(string: "{{authPath}}/{{envID}}/saml20/resume?flowId={{flowID}}")!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}
task.resume()
Example Response
200 OK
<!-- template name: saml20.response.autopost.ftl -->
<html>
<head>
<title>Submit Form</title>
</head>
<body onload="javascript:document.forms[0].submit()">
<noscript>
<p>
<strong>Note:</strong> Since your browser does not support JavaScript,
you must press the Resume button once to proceed.
</p>
</noscript>
<form method="post" action="https://decoder.pingidentity.cloud/saml">
<input type="hidden" id="SAMLResponse" name="SAMLResponse" value="PHNhbWxwOlJlc3BvbnNlIElEPSJpZC1jMTg3MDA3Ny1lYTNkLTQ1NWItYmNhYy0wMTdiZDY5MTVhMTciIFZlcnNpb249IjIuMCIgSXNzdWVJbnN0YW50PSIyMDIzLTA1LTE1VDE4OjI0OjU5LjAwMVoiIEluUmVzcG9uc2VUbz0iSUQtOGExZjA2YTMtZjQ3ZS00NzdiLWJhYzQtMzE4NjZhOWZiMTAxIiBEZXN0aW5hdGlvbj0iaHR0cHM6Ly9kZWNvZGVyLnBpbmdpZGVudGl0eS5jbG91ZC9zYW1sIiB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI+aHR0cHM6Ly9hdXRoLnBpbmdvbmUuY29tLzA4MmRiYTg2LWQzNmUtNDEzZS04NWI0LWVlNDk5YTVjZWE1NTwvc2FtbDpJc3N1ZXI+PHNhbWxwOlN0YXR1cz48c2FtbHA6U3RhdHVzQ29kZSBWYWx1ZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnN0YXR1czpTdWNjZXNzIi8+PC9zYW1scDpTdGF0dXM+PHNhbWw6QXNzZXJ0aW9uIElEPSJpZC0yZGI5M2JhNi0zYzg1LTRjZTAtYTE5My03NWM1NThiMTNlZTIiIFZlcnNpb249IjIuMCIgSXNzdWVJbnN0YW50PSIyMDIzLTA1LTE1VDE4OjI0OjU5LjAwMVoiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPjxzYW1sOklzc3Vlcj5odHRwczovL2F1dGgucGluZ29uZS5jb20vMDgyZGJhODYtZDM2ZS00MTNlLTg1YjQtZWU0OTlhNWNlYTU1PC9zYW1sOklzc3Vlcj48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNpZC0yZGI5M2JhNi0zYzg1LTRjZTAtYTE5My03NWM1NThiMTNlZTIiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5zNWYyNXk3ZmFTS2dtMHJUTXlKZnQ0OENqRDVvVGpwdVo2VkdTMDZiSVVRPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZT5ZSnZheHgrNFU1TjloblREVWs2QUFjNkkxRFlLeVJPZHpWZ0hFUW1jbVhkbW0vWXJwRndyYjRVbXduaEY4UEd2NTgxcDZycDBOSDhOeHpxalZpTHE4YVVjU2E0QStsZjA4UEIxamN0RzAxb0xUS3VEOVhlaThjVURMcGVwL2JRYnduSDNpeERua1ZEa2N2d0h4RDNJS1RFTUJCR1M2bGJpS0NnYTNiYkpydWJHeDh1cUU4NHZwZHZhMVZJcXM3aTloZ2E0ejVSTlpBVkhPdnA0Tkw2SG93K3JORnc2Y3lJNCt2QU12bXU1SU5qek01OEM3Vlh0Wm56cURsa0dsaDh2Qmt0WHlFbkhsMWplVWhOeC81U2xBYmh3dzZPU2trN0VVUC9xY2ZManpIL0F2VEtNbllTaHQyMjdVMlJrTTZFNjNJSXlXangzdVpZb1FybTFiV3RqWWc9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRGhEQ0NBbXlnQXdJQkFnSUdBWGZibXhWaU1BMEdDU3FHU0liM0RRRUJDd1VBTUlHQ01Rc3dDUVlEVlFRR0V3SlZVekVXTUJRR0ExVUVDZ3dOVUdsdVp5QkpaR1Z1ZEdsMGVURVdNQlFHQTFVRUN3d05VR2x1WnlCSlpHVnVkR2wwZVRGRE1FRUdBMVVFQXd3NlVHbHVaMDl1WlNCVFUwOGdRMlZ5ZEdsbWFXTmhkR1VnWm05eUlFNWxkeTFGYm5aZk1UWXhOREk1TnpFeE1DQmxiblpwY205dWJXVnVkREFlRncweU1UQXlNalV5TXpVeE5EbGFGdzB5TWpBeU1qVXlNelV4TkRsYU1JR0NNUXN3Q1FZRFZRUUdFd0pWVXpFV01CUUdBMVVFQ2d3TlVHbHVaeUJKWkdWdWRHbDBlVEVXTUJRR0ExVUVDd3dOVUdsdVp5QkpaR1Z1ZEdsMGVURkRNRUVHQTFVRUF3dzZVR2x1WjA5dVpTQlRVMDhnUTJWeWRHbG1hV05oZEdVZ1ptOXlJRTVsZHkxRmJuWmZNVFl4TkRJNU56RXhNQ0JsYm5acGNtOXViV1Z1ZERDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTXpleWRqc29sTUliVFVBeFg4dHNkUmhIMUtqUTBaUS9oakE2RXB0dVB6WWk2QWZZYXdhL1NmL2FiSmxoNTZCOXdCMkNPcEE5cXJ4SjdsbW9Fc0tYbExhNWJNT3Y5amdvdFI4WHpQMWFHdWdDR3NQRWlkYmdzODNpTVZObERvVUkyRGlCZzYvK0pxbzZVZmJMUm52TUNUeTN4bDVHMzJURnFCOUxHS2tHL29YVWhPVTRNc29sWTNSdjh6WXJucVdVbmFxTmQ2ejJBZWdGVnZKREhLb0ZlTXFrYzhoSjhLcmZCWk5WMnFpa0dpMjUyTzRVVGVmWk91MFFpcHBxMEV2VURmc2l0amp0RzBoZmJrNU44d0h4WWdRNVZSNXZWd1dQbkZsKzh3N3RZU21iRllwTTdUM0d6N2M5R2I0SDJBd3JHK204OXJYZ3JvOUU4T1greG1ObVFjQ0F3RUFBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBT3dpVjRSbllMZnRlYko4djZMTllna3Z6VEZjOE5ob0tXZDJPY2VPd0JZNTJTcGJ6UGVqMThkamRnSExZcERPRk95SU9tS0dJd2pwUWFvaGJUWXM0TnNnUno1OUNiWjB4ZVJhOFRYcElFNW00QTdTK0tjZU5Ob0RZT1hIeGY3dWk0ZGphZGpDWlZUaDRUbFIzeVJrT3VpejZMUzNvNndaVHcxU1FndFE5cU0xQXl5TVlyd0cvZnFzOWcrZHNmL0U2c1J0WVR0RktRSFI3cVV2Y3o1c0ZMSndISk5LSUVkUS9oSFIyUDZybjdyUlBYckVmcTd0OEwyTXhJeFVnNzhtU3UyUHk0QmRXR1hIcFFqQ1VrSngwMEluUlNWSC9JSVo4a0tLZUJ2SkdXRStmaWRtTlo0NGJOWXN5VXZXUzdFY0dUYnczUndHQjZ3d3RkdzNtYVRvQUtBPT08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjxkczpLZXlWYWx1ZT48ZHM6UlNBS2V5VmFsdWU+PGRzOk1vZHVsdXM+ek43SjJPeWlVd2h0TlFERmZ5MngxR0VmVXFORFJsRCtHTURvU20yNC9OaUxvQjlockJyOUovOXBzbVdIbm9IM0FIWUk2a0QycXZFbnVXYWdTd3BlVXRybHN3Ni8yT0NpMUh4Zk0vVm9hNkFJYXc4U0oxdUN6emVJeFUyVU9oUWpZT0lHRHIvNG1xanBSOXN0R2U4d0pQTGZHWGtiZlpNV29IMHNZcVFiK2hkU0U1VGd5eWlWamRHL3pOaXVlcFpTZHFvMTNyUFlCNkFWVzhrTWNxZ1Y0eXFSenlFbndxdDhGazFYYXFLUWFMYm5ZN2hSTjU5azY3UkNLbW1yUVM5UU4reUsyT08wYlNGOXVUazN6QWZGaUJEbFZIbTlYQlkrY1dYN3pEdTFoS1pzVmlrenRQY2JQdHowWnZnZllEQ3NiNmJ6MnRlQ3VqMFR3NWY3R1kyWkJ3PT08L2RzOk1vZHVsdXM+PGRzOkV4cG9uZW50PkFRQUI8L2RzOkV4cG9uZW50PjwvZHM6UlNBS2V5VmFsdWU+PC9kczpLZXlWYWx1ZT48L2RzOktleUluZm8+PC9kczpTaWduYXR1cmU+PHNhbWw6U3ViamVjdD48c2FtbDpOYW1lSUQgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDplbWFpbEFkZHJlc3MiPjk0NzM3MDRkLTBlNDQtNDJhZi1iMTAyLWRmZGMyZjE3OThjNTwvc2FtbDpOYW1lSUQ+PHNhbWw6U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxzYW1sOlN1YmplY3RDb25maXJtYXRpb25EYXRhIE5vdE9uT3JBZnRlcj0iMjAyMy0wNS0xNVQxODoyNTo1OS4wMDFaIiBSZWNpcGllbnQ9Imh0dHBzOi8vZGVjb2Rlci5waW5naWRlbnRpdHkuY2xvdWQvc2FtbCIgSW5SZXNwb25zZVRvPSJJRC04YTFmMDZhMy1mNDdlLTQ3N2ItYmFjNC0zMTg2NmE5ZmIxMDEiLz48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj48L3NhbWw6U3ViamVjdD48c2FtbDpDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAyMy0wNS0xNVQxODoyMzo1OS4wMDFaIiBOb3RPbk9yQWZ0ZXI9IjIwMjMtMDUtMTVUMTg6MjU6NTkuMDAxWiI+PHNhbWw6QXVkaWVuY2VSZXN0cmljdGlvbj48c2FtbDpBdWRpZW5jZT5zYW1sdGVzdDE2ODQxNzUwMzI8L3NhbWw6QXVkaWVuY2U+PC9zYW1sOkF1ZGllbmNlUmVzdHJpY3Rpb24+PC9zYW1sOkNvbmRpdGlvbnM+PHNhbWw6QXV0aG5TdGF0ZW1lbnQgQXV0aG5JbnN0YW50PSIyMDIzLTA1LTE1VDE4OjI0OjU5LjAwMVoiIFNlc3Npb25Ob3RPbk9yQWZ0ZXI9IjIwMjMtMDUtMTVUMTg6MjU6NTkuMDAxWiIgU2Vzc2lvbkluZGV4PSJlOTAxNjkzOS0xZDRlLTQ4M2QtYjQ1MC03ZWI0NGE5NTRhYTkiPjxzYW1sOkF1dGhuQ29udGV4dD48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydDwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48c2FtbDpBdXRoZW50aWNhdGluZ0F1dGhvcml0eT5odHRwczovL2F1dGgucGluZ29uZS5jb20vMDgyZGJhODYtZDM2ZS00MTNlLTg1YjQtZWU0OTlhNWNlYTU1PC9zYW1sOkF1dGhlbnRpY2F0aW5nQXV0aG9yaXR5Pjwvc2FtbDpBdXRobkNvbnRleHQ+PC9zYW1sOkF1dGhuU3RhdGVtZW50PjxzYW1sOkF0dHJpYnV0ZVN0YXRlbWVudD48c2FtbDpBdHRyaWJ1dGUgTmFtZT0ic2FtbF9zdWJqZWN0IiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OmJhc2ljIj48c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4c2k6dHlwZT0ieHM6c3RyaW5nIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPjk0NzM3MDRkLTBlNDQtNDJhZi1iMTAyLWRmZGMyZjE3OThjNTwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT48L3NhbWw6QXR0cmlidXRlPjwvc2FtbDpBdHRyaWJ1dGVTdGF0ZW1lbnQ+PC9zYW1sOkFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg=="/>
<input type="hidden" id="RelayState" name="RelayState" value="token"/>
<noscript>
<input type="submit" value="Resume"/>
</noscript>
</form>
</body>
</html>