PingOne Platform APIs

Record User OAuth Scope Consent

 

POST {{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents

The POST {{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents operation creates an OAuth scope consent for the specified user. This operation uses the application/vnd.pingidentity.consent.accept+json custom content type in the request header.

Request Model

For property descriptions, refer to OAuth scope consent data model.

Property Type Required?

application

Relationship

Optional

application.id

String

Optional

application.name

String

Optional

application.appType

String

Optional

scope

Set

Optional

status

String

Required

user

Relationship

Optional

user.id

String

Optional

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/vnd.pingidentity.consent.accept+json

Body

raw ( application/vnd.pingidentity.consent.accept+json )

{
  "application": {
    "name": "externalApp1",
    "appType": "EXTERNAL"
  },
  "scope": [
    "openid"
  ],
  "browser": {
    "name": "Chrome",
    "version": "101"
  },
  "operatingSystem": {
    "name": "Mac OS",
    "version": "12.5.1"
  },
  "device": {
    "type": "desktop"
  },
  "status": "ACCEPTED"
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents' \
--header 'Content-Type: application/vnd.pingidentity.consent.accept+json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
  "application": {
    "name": "externalApp1",
    "appType": "EXTERNAL"
  },
  "scope": [
    "openid"
  ],
  "browser": {
    "name": "Chrome",
    "version": "101"
  },
  "operatingSystem": {
    "name": "Mac OS",
    "version": "12.5.1"
  },
  "device": {
    "type": "desktop"
  },
  "status": "ACCEPTED"
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/vnd.pingidentity.consent.accept+json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"  ""application"": {" + "\n" +
@"    ""name"": ""externalApp1""," + "\n" +
@"    ""appType"": ""EXTERNAL""" + "\n" +
@"  }," + "\n" +
@"  ""scope"": [" + "\n" +
@"    ""openid""" + "\n" +
@"  ]," + "\n" +
@"  ""browser"": {" + "\n" +
@"    ""name"": ""Chrome""," + "\n" +
@"    ""version"": ""101""" + "\n" +
@"  }," + "\n" +
@"  ""operatingSystem"": {" + "\n" +
@"    ""name"": ""Mac OS""," + "\n" +
@"    ""version"": ""12.5.1""" + "\n" +
@"  }," + "\n" +
@"  ""device"": {" + "\n" +
@"    ""type"": ""desktop""" + "\n" +
@"  }," + "\n" +
@"  ""status"": ""ACCEPTED""" + "\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}}/users/{{userID}}/oauthConsents"
  method := "POST"

  payload := strings.NewReader(`{
  "application": {
    "name": "externalApp1",
    "appType": "EXTERNAL"
  },
  "scope": [
    "openid"
  ],
  "browser": {
    "name": "Chrome",
    "version": "101"
  },
  "operatingSystem": {
    "name": "Mac OS",
    "version": "12.5.1"
  },
  "device": {
    "type": "desktop"
  },
  "status": "ACCEPTED"
}`)

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

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/vnd.pingidentity.consent.accept+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}}/users/{{userID}}/oauthConsents HTTP/1.1
Host: {{apiPath}}
Content-Type: application/vnd.pingidentity.consent.accept+json
Authorization: Bearer {{accessToken}}

{
  "application": {
    "name": "externalApp1",
    "appType": "EXTERNAL"
  },
  "scope": [
    "openid"
  ],
  "browser": {
    "name": "Chrome",
    "version": "101"
  },
  "operatingSystem": {
    "name": "Mac OS",
    "version": "12.5.1"
  },
  "device": {
    "type": "desktop"
  },
  "status": "ACCEPTED"
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/vnd.pingidentity.consent.accept+json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"application\": {\n    \"name\": \"externalApp1\",\n    \"appType\": \"EXTERNAL\"\n  },\n  \"scope\": [\n    \"openid\"\n  ],\n  \"browser\": {\n    \"name\": \"Chrome\",\n    \"version\": \"101\"\n  },\n  \"operatingSystem\": {\n    \"name\": \"Mac OS\",\n    \"version\": \"12.5.1\"\n  },\n  \"device\": {\n    \"type\": \"desktop\"\n  },\n  \"status\": \"ACCEPTED\"\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents")
  .method("POST", body)
  .addHeader("Content-Type", "application/vnd.pingidentity.consent.accept+json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/vnd.pingidentity.consent.accept+json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "application": {
      "name": "externalApp1",
      "appType": "EXTERNAL"
    },
    "scope": [
      "openid"
    ],
    "browser": {
      "name": "Chrome",
      "version": "101"
    },
    "operatingSystem": {
      "name": "Mac OS",
      "version": "12.5.1"
    },
    "device": {
      "type": "desktop"
    },
    "status": "ACCEPTED"
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents',
  'headers': {
    'Content-Type': 'application/vnd.pingidentity.consent.accept+json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "application": {
      "name": "externalApp1",
      "appType": "EXTERNAL"
    },
    "scope": [
      "openid"
    ],
    "browser": {
      "name": "Chrome",
      "version": "101"
    },
    "operatingSystem": {
      "name": "Mac OS",
      "version": "12.5.1"
    },
    "device": {
      "type": "desktop"
    },
    "status": "ACCEPTED"
  })

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

url = "{{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents"

payload = json.dumps({
  "application": {
    "name": "externalApp1",
    "appType": "EXTERNAL"
  },
  "scope": [
    "openid"
  ],
  "browser": {
    "name": "Chrome",
    "version": "101"
  },
  "operatingSystem": {
    "name": "Mac OS",
    "version": "12.5.1"
  },
  "device": {
    "type": "desktop"
  },
  "status": "ACCEPTED"
})
headers = {
  'Content-Type': 'application/vnd.pingidentity.consent.accept+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}}/users/{{userID}}/oauthConsents');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/vnd.pingidentity.consent.accept+json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n  "application": {\n    "name": "externalApp1",\n    "appType": "EXTERNAL"\n  },\n  "scope": [\n    "openid"\n  ],\n  "browser": {\n    "name": "Chrome",\n    "version": "101"\n  },\n  "operatingSystem": {\n    "name": "Mac OS",\n    "version": "12.5.1"\n  },\n  "device": {\n    "type": "desktop"\n  },\n  "status": "ACCEPTED"\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}}/users/{{userID}}/oauthConsents")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/vnd.pingidentity.consent.accept+json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "application": {
    "name": "externalApp1",
    "appType": "EXTERNAL"
  },
  "scope": [
    "openid"
  ],
  "browser": {
    "name": "Chrome",
    "version": "101"
  },
  "operatingSystem": {
    "name": "Mac OS",
    "version": "12.5.1"
  },
  "device": {
    "type": "desktop"
  },
  "status": "ACCEPTED"
})

response = http.request(request)
puts response.read_body
let parameters = "{\n  \"application\": {\n    \"name\": \"externalApp1\",\n    \"appType\": \"EXTERNAL\"\n  },\n  \"scope\": [\n    \"openid\"\n  ],\n  \"browser\": {\n    \"name\": \"Chrome\",\n    \"version\": \"101\"\n  },\n  \"operatingSystem\": {\n    \"name\": \"Mac OS\",\n    \"version\": \"12.5.1\"\n  },\n  \"device\": {\n    \"type\": \"desktop\"\n  },\n  \"status\": \"ACCEPTED\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/users/{{userID}}/oauthConsents")!,timeoutInterval: Double.infinity)
request.addValue("application/vnd.pingidentity.consent.accept+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/users/01dee5b5-48fa-4a6b-a574-f2ff28ab5b32/oauthConsents/663a3fae-b0fa-4da3-a9ae-f2d60aebe56c"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        },
        "user": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/01dee5b5-48fa-4a6b-a574-f2ff28ab5b32"
        },
        "consent.revoke": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/01dee5b5-48fa-4a6b-a574-f2ff28ab5b32/oauthConsents/663a3fae-b0fa-4da3-a9ae-f2d60aebe56c"
        }
    },
    "id": "663a3fae-b0fa-4da3-a9ae-f2d60aebe56c",
    "application": {
        "id": "a4f6b7ed-95be-4dde-b5b5-dde152625b75"
    },
    "applicationName": "externalApp1",
    "applicationType": "EXTERNAL",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "user": {
        "id": "01dee5b5-48fa-4a6b-a574-f2ff28ab5b32"
    },
    "scope": [
        "openid"
    ],
    "browser": {
        "name": "Chrome",
        "version": "101"
    },
    "operatingSystem": {
        "name": "Mac OS",
        "version": "12.5.1"
    },
    "device": {
        "type": "desktop"
    },
    "location": {
        "remoteIp": "174.21.50.32",
        "city": "tacoma",
        "state": "washington",
        "region": "pacific northwest",
        "country": "united states"
    },
    "status": "ACCEPTED",
    "consentedAt": "2022-08-24T22:31:45.573Z",
    "updatedAt": "2022-08-24T22:31:45.573Z"
}