Tools and information for 3rd party integrators
OpenID Connect
SmartCentral supports the OpenID Connect specification as an Identity Provider.
Resources for specifications and sample code libraries:
* http://openid.net/connect/
* https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts
FAQ
Our OpenID entry point for staging is:
* http://test.smartcentral.net/authorizations/new/
To get JWK public keys :
* http://test.smartcentral.net/jwks.json
Create your own test account :
* http://test.smartcentral.net/user/new/
Implicit flow
- 3rd party sends authorisation request
http://test.smartcentral.net/authorizations/new/?client_id=fancy_app&response_type=id_token%20token&scope=openid%20email&nonce=1234&redirect_uri=http://localhost:3001/auth
-
SmartCentral redirects end user to login page if not logged in, after end user’s authorisation, send the following fields (http form fields encoded) to redirect_uri provided by 3rd party.
- access_token
- id_token
- token_type
-
After 3rd party received id_token (JWT format), the id token should be verified using the public key provided by SmartCentral http://test.smartcentral.net/jwks.json
-
To get readble information of the user, 3rd party sends GET request with access token returned by SmartCentral to http://test.smartcentral.net/user_info?access_token=abcd
-
User info returns the following fields:
- subject (SmartCentral user unique id)
- name
GraphQL
SmartCentral has implemented GraphQL to support an extensible method for api access to centre data.
Schema
type service (id){
id: ID
type: String
name: String
enrolments: [enrolment]
}
type enrolment{
child: child
parent1: parent
parent2: parent
bookings: [booking]
startDate: String
endDate: String
status: String
sessions(date): [session]
}
/* Date strings are 10 char ISO dates in tz of centre
/* Status values are : 'Exited' , 'Not yet submitted' , Active
/* Status = 'Active' covers all internal values that dont
/* fall in other 2
type child{
id: ID
firstName: String
lastName: String
dateOfBirth : Date
gender : string
}
/* gender is a 1 char field 'm' or 'f'
type parent{
id: ID
firstName: String
lastName: String
email: String
}
type booking{
day: String
room: String
}
/* "day" is a 3 character abreviation of day of the week MON , TUE, WED , THU , FRI , SAT , SUN
/* week starts on MON and ends on SUN
type session{
room: String;
startTime: String;
endTime: String;
absent: Boolean;
}
/* time is passed as hh:mm:ss in local time of the centre
Sample Query 1
{
"query": "{
service(id: 1) {
id
enrolments {
child {
id
firstName
lastName
}
parent1 {
id
firstName
lastName
email
}
parent2 {
id
firstName
lastName
email
}
startDate
status
bookings {
day
room
}
}
}
}"
}
Sample Query 2
{
"query": "{
service(id: 1) {
id
enrolments {
child {
id
firstName
lastName
}
parent1 {
id
firstName
lastName
email
}
parent2 {
firstName
lastName
email
}
startDate
status
bookings {
day
room
}
sessions(date: \"2020-01-08\") {
room
startTime
endTime
absent
}
}
}
}"
}