PingOne Platform APIs

Step 2: Create the new identity provider resource

   

POST {{apiPath}}/environments/{{envID}}/identityProviders

You can use the POST {{apiPath}}/environments/{{envID}}/identityProviders endpoint to create the SAML identity provider configuration. This request automatically creates the core attribute mapping to associate the PingOne username attribute with the SAML samlAssertion.subject attribute. To verify the mapping, you can use the ?expand=attributes query filter to show the core attribute mapping details in the POST response.

In the request, the name property for the new identity provider is required and must be unique within the environment. The enabled property is required and should be set to true, and the type property is required and must specify SAML as the identity provider type.

The idpVerification.certificates[].id is required. This is the UUID of the verification certificate that you uploaded in Step 1a. The spSigning.key.id property value is the UUID of the signing key that you uploaded in Step 1b.

The response shows the configuration data for the new identity provider.

The response also includes an attributes link to initiate a request to create additional optional attribute mappings.

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "name": "SAMLIdP",
    "description": "My SAML IdP",
    "type": "SAML",
    "enabled": false,
    "spEntityId": "https://www.example.com",
    "idpEntityId": "https://www.example.com",
    "ssoBinding": "HTTP_POST",
    "ssoEndpoint": "https://idp.com/sso",
    "authnRequestSigned": "false",
    "idpVerification": {
        "certificates": [
            {
                "id": "{{samlIdpVerificationCertID}}"
            }
        ]
    },
    "#spSigning": {
        "key": {
            "id": "{{samlIdpSigningKeyID}}"
        }
    }
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/identityProviders' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name": "SAMLIdP",
    "description": "My SAML IdP",
    "type": "SAML",
    "enabled": false,
    "spEntityId": "https://www.example.com",
    "idpEntityId": "https://www.example.com",
    "ssoBinding": "HTTP_POST",
    "ssoEndpoint": "https://idp.com/sso",
    "authnRequestSigned": "false",
    "idpVerification": {
        "certificates": [
            {
                "id": "{{samlIdpVerificationCertID}}"
            }
        ]
    },
    "#spSigning": {
        "key": {
            "id": "{{samlIdpSigningKeyID}}"
        }
    }
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/identityProviders")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"    ""name"": ""SAMLIdP""," + "\n" +
@"    ""description"": ""My SAML IdP""," + "\n" +
@"    ""type"": ""SAML""," + "\n" +
@"    ""enabled"": false," + "\n" +
@"    ""spEntityId"": ""https://www.example.com""," + "\n" +
@"    ""idpEntityId"": ""https://www.example.com""," + "\n" +
@"    ""ssoBinding"": ""HTTP_POST""," + "\n" +
@"    ""ssoEndpoint"": ""https://idp.com/sso""," + "\n" +
@"    ""authnRequestSigned"": ""false""," + "\n" +
@"    ""idpVerification"": {" + "\n" +
@"        ""certificates"": [" + "\n" +
@"            {" + "\n" +
@"                ""id"": ""{{samlIdpVerificationCertID}}""" + "\n" +
@"            }" + "\n" +
@"        ]" + "\n" +
@"    }," + "\n" +
@"    ""#spSigning"": {" + "\n" +
@"        ""key"": {" + "\n" +
@"            ""id"": ""{{samlIdpSigningKeyID}}""" + "\n" +
@"        }" + "\n" +
@"    }" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/environments/{{envID}}/identityProviders"
  method := "POST"

  payload := strings.NewReader(`{
    "name": "SAMLIdP",
    "description": "My SAML IdP",
    "type": "SAML",
    "enabled": false,
    "spEntityId": "https://www.example.com",
    "idpEntityId": "https://www.example.com",
    "ssoBinding": "HTTP_POST",
    "ssoEndpoint": "https://idp.com/sso",
    "authnRequestSigned": "false",
    "idpVerification": {
        "certificates": [
            {
                "id": "{{samlIdpVerificationCertID}}"
            }
        ]
    },
    "#spSigning": {
        "key": {
            "id": "{{samlIdpSigningKeyID}}"
        }
    }
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

  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))
}
POST /environments/{{envID}}/identityProviders HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
    "name": "SAMLIdP",
    "description": "My SAML IdP",
    "type": "SAML",
    "enabled": false,
    "spEntityId": "https://www.example.com",
    "idpEntityId": "https://www.example.com",
    "ssoBinding": "HTTP_POST",
    "ssoEndpoint": "https://idp.com/sso",
    "authnRequestSigned": "false",
    "idpVerification": {
        "certificates": [
            {
                "id": "{{samlIdpVerificationCertID}}"
            }
        ]
    },
    "#spSigning": {
        "key": {
            "id": "{{samlIdpSigningKeyID}}"
        }
    }
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"SAMLIdP\",\n    \"description\": \"My SAML IdP\",\n    \"type\": \"SAML\",\n    \"enabled\": false,\n    \"spEntityId\": \"https://www.example.com\",\n    \"idpEntityId\": \"https://www.example.com\",\n    \"ssoBinding\": \"HTTP_POST\",\n    \"ssoEndpoint\": \"https://idp.com/sso\",\n    \"authnRequestSigned\": \"false\",\n    \"idpVerification\": {\n        \"certificates\": [\n            {\n                \"id\": \"{{samlIdpVerificationCertID}}\"\n            }\n        ]\n    },\n    \"#spSigning\": {\n        \"key\": {\n            \"id\": \"{{samlIdpSigningKeyID}}\"\n        }\n    }\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/identityProviders")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/environments/{{envID}}/identityProviders",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "SAMLIdP",
    "description": "My SAML IdP",
    "type": "SAML",
    "enabled": false,
    "spEntityId": "https://www.example.com",
    "idpEntityId": "https://www.example.com",
    "ssoBinding": "HTTP_POST",
    "ssoEndpoint": "https://idp.com/sso",
    "authnRequestSigned": "false",
    "idpVerification": {
      "certificates": [
        {
          "id": "{{samlIdpVerificationCertID}}"
        }
      ]
    },
    "#spSigning": {
      "key": {
        "id": "{{samlIdpSigningKeyID}}"
      }
    }
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/identityProviders',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "SAMLIdP",
    "description": "My SAML IdP",
    "type": "SAML",
    "enabled": false,
    "spEntityId": "https://www.example.com",
    "idpEntityId": "https://www.example.com",
    "ssoBinding": "HTTP_POST",
    "ssoEndpoint": "https://idp.com/sso",
    "authnRequestSigned": "false",
    "idpVerification": {
      "certificates": [
        {
          "id": "{{samlIdpVerificationCertID}}"
        }
      ]
    },
    "#spSigning": {
      "key": {
        "id": "{{samlIdpSigningKeyID}}"
      }
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests
import json

url = "{{apiPath}}/environments/{{envID}}/identityProviders"

payload = json.dumps({
  "name": "SAMLIdP",
  "description": "My SAML IdP",
  "type": "SAML",
  "enabled": False,
  "spEntityId": "https://www.example.com",
  "idpEntityId": "https://www.example.com",
  "ssoBinding": "HTTP_POST",
  "ssoEndpoint": "https://idp.com/sso",
  "authnRequestSigned": "false",
  "idpVerification": {
    "certificates": [
      {
        "id": "{{samlIdpVerificationCertID}}"
      }
    ]
  },
  "#spSigning": {
    "key": {
      "id": "{{samlIdpSigningKeyID}}"
    }
  }
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/environments/{{envID}}/identityProviders');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n    "name": "SAMLIdP",\n    "description": "My SAML IdP",\n    "type": "SAML",\n    "enabled": false,\n    "spEntityId": "https://www.example.com",\n    "idpEntityId": "https://www.example.com",\n    "ssoBinding": "HTTP_POST",\n    "ssoEndpoint": "https://idp.com/sso",\n    "authnRequestSigned": "false",\n    "idpVerification": {\n        "certificates": [\n            {\n                "id": "{{samlIdpVerificationCertID}}"\n            }\n        ]\n    },\n    "#spSigning": {\n        "key": {\n            "id": "{{samlIdpSigningKeyID}}"\n        }\n    }\n}');
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 "json"
require "net/http"

url = URI("{{apiPath}}/environments/{{envID}}/identityProviders")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "name": "SAMLIdP",
  "description": "My SAML IdP",
  "type": "SAML",
  "enabled": false,
  "spEntityId": "https://www.example.com",
  "idpEntityId": "https://www.example.com",
  "ssoBinding": "HTTP_POST",
  "ssoEndpoint": "https://idp.com/sso",
  "authnRequestSigned": "false",
  "idpVerification": {
    "certificates": [
      {
        "id": "{{samlIdpVerificationCertID}}"
      }
    ]
  },
  "\#spSigning": {
    "key": {
      "id": "{{samlIdpSigningKeyID}}"
    }
  }
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"name\": \"SAMLIdP\",\n    \"description\": \"My SAML IdP\",\n    \"type\": \"SAML\",\n    \"enabled\": false,\n    \"spEntityId\": \"https://www.example.com\",\n    \"idpEntityId\": \"https://www.example.com\",\n    \"ssoBinding\": \"HTTP_POST\",\n    \"ssoEndpoint\": \"https://idp.com/sso\",\n    \"authnRequestSigned\": \"false\",\n    \"idpVerification\": {\n        \"certificates\": [\n            {\n                \"id\": \"{{samlIdpVerificationCertID}}\"\n            }\n        ]\n    },\n    \"#spSigning\": {\n        \"key\": {\n            \"id\": \"{{samlIdpSigningKeyID}}\"\n        }\n    }\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/identityProviders")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "POST"
request.httpBody = postData

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

201 Created

{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/identityProviders/281dd63a-0b91-4511-93ba-7ae5e8285863"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        },
        "attributes": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/identityProviders/281dd63a-0b91-4511-93ba-7ae5e8285863/attributes"
        }
    },
    "id": "281dd63a-0b91-4511-93ba-7ae5e8285863",
    "type": "SAML",
    "name": "SAMLIdP",
    "description": "My SAML IdP",
    "enabled": false,
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "createdAt": "2021-04-15T22:36:02.251Z",
    "updatedAt": "2021-04-15T22:36:02.251Z",
    "authnRequestSigned": false,
    "ssoEndpoint": "https://idp.com/sso",
    "ssoBinding": "HTTP_POST",
    "idpVerification": {
        "certificates": [
            {
                "id": "a1fbb28d-..."
            }
        ]
    },
    "spEntityId": "https://www.example.com",
    "idpEntityId": "https://www.example.com"
}