PingOne Platform APIs

Create Identity Provider (Github)

   

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

The POST {{apiPath}}/environments/{{envID}}/identityProviders operation adds a new identity provider resource to the specified environment.

This request supports the ?expand=attributes query filter to show the details for the core attribute mapping created by the request.

When the type property value is set to GITHUB, Github’s clientId and clientSecret property values are required in the request body.

Prerequisites

Request Model

Github identity provider settings data model

Property Type Required?

clientId

String

Required

clientSecret

String

Required

Github core attributes

Property Description

id

A string that specifies the core Github attribute. The default value is ${providerAttributes.id} and the default update value is EMPTY_ONLY.

Github provider attributes

Permission Provider attributes

read:user

Options are: email, login, id, node_id, avatar_url, url, html_url, type, site_admin, name, company, blog, location

user:email

email

Refer to Base IdP data model for the properties available to all of the supported identity providers.

The email address for the read:user permission is the user’s public email address. The email address for the user:email permission is the user’s private email address.

Query parameters
Parameter Description

expand

When equal to attributes, shows the details for the core attribute mapping created by the request.

Example: POST {{apiPath}}/environments/{{envID}}/identityProviders?expand=attributes

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "description": "Github Provider",
    "enabled": true,
    "name": "GithubIdP",
    "type": "GITHUB",
    "clientId": "GITHUB_ID",
    "clientSecret": "GITHUB_SECRET"
}

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 '{
    "description": "Github Provider",
    "enabled": true,
    "name": "GithubIdP",
    "type": "GITHUB",
    "clientId": "GITHUB_ID",
    "clientSecret": "GITHUB_SECRET"
}'
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" +
@"    ""description"": ""Github Provider""," + "\n" +
@"    ""enabled"": true," + "\n" +
@"    ""name"": ""GithubIdP""," + "\n" +
@"    ""type"": ""GITHUB""," + "\n" +
@"    ""clientId"": ""GITHUB_ID""," + "\n" +
@"    ""clientSecret"": ""GITHUB_SECRET""" + "\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(`{
    "description": "Github Provider",
    "enabled": true,
    "name": "GithubIdP",
    "type": "GITHUB",
    "clientId": "GITHUB_ID",
    "clientSecret": "GITHUB_SECRET"
}`)

  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}}

{
    "description": "Github Provider",
    "enabled": true,
    "name": "GithubIdP",
    "type": "GITHUB",
    "clientId": "GITHUB_ID",
    "clientSecret": "GITHUB_SECRET"
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"description\": \"Github Provider\",\n    \"enabled\": true,\n    \"name\": \"GithubIdP\",\n    \"type\": \"GITHUB\",\n    \"clientId\": \"GITHUB_ID\",\n    \"clientSecret\": \"GITHUB_SECRET\"\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({
    "description": "Github Provider",
    "enabled": true,
    "name": "GithubIdP",
    "type": "GITHUB",
    "clientId": "GITHUB_ID",
    "clientSecret": "GITHUB_SECRET"
  }),
};

$.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({
    "description": "Github Provider",
    "enabled": true,
    "name": "GithubIdP",
    "type": "GITHUB",
    "clientId": "GITHUB_ID",
    "clientSecret": "GITHUB_SECRET"
  })

};
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({
  "description": "Github Provider",
  "enabled": True,
  "name": "GithubIdP",
  "type": "GITHUB",
  "clientId": "GITHUB_ID",
  "clientSecret": "GITHUB_SECRET"
})
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    "description": "Github Provider",\n    "enabled": true,\n    "name": "GithubIdP",\n    "type": "GITHUB",\n    "clientId": "GITHUB_ID",\n    "clientSecret": "GITHUB_SECRET"\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({
  "description": "Github Provider",
  "enabled": true,
  "name": "GithubIdP",
  "type": "GITHUB",
  "clientId": "GITHUB_ID",
  "clientSecret": "GITHUB_SECRET"
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"description\": \"Github Provider\",\n    \"enabled\": true,\n    \"name\": \"GithubIdP\",\n    \"type\": \"GITHUB\",\n    \"clientId\": \"GITHUB_ID\",\n    \"clientSecret\": \"GITHUB_SECRET\"\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/1ae701ef-302b-4083-943e-7cf4fea9ff66"
        },
        "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/1ae701ef-302b-4083-943e-7cf4fea9ff66/attributes"
        }
    },
    "id": "1ae701ef-302b-4083-943e-7cf4fea9ff66",
    "type": "GITHUB",
    "name": "GithubIdP",
    "description": "Github Provider",
    "enabled": true,
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "createdAt": "2020-07-20T16:34:28.118Z",
    "updatedAt": "2020-07-20T16:34:28.118Z",
    "clientSecret": "GITHUB_SECRET",
    "clientId": "GITHUB_ID"
}