Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
protogrid:json_api_authentication [2017-12-08 17:29] csoprotogrid:json_api_authentication [2022-02-21 23:30] – [How to authenticate] dru
Line 1: Line 1:
 ====== JSON API Authentication ====== ====== JSON API Authentication ======
  
-At the moment only Basic Authentication is supported. If you need OAuth2 please contact us at [[mailto:protogrid-support@protogrid.com|protogrid-support@protogrid.com]]. All http requests require an authentication. If the authentication fails, an error will be returned. The error describes whether a HTTP Header field is missing or the login data is incorrect.+All HTTP requests to the Protogrid JSON API require a valid authentication. If the authentication fails, an HTTP error 403 will be returned. Currently, the following variants are available for authentication: 
 +  * [[https://en.wikipedia.org/wiki/Basic_access_authentication|HTTP Basic authentication (BA)]]. 
 +  * Header Authentication using the HTTP headers 'username' and 'password'
 +  * Cookie Authentication using the session cookie returned after a successfull authentication with one of the upper two variants.
  
-==== How to authenticate ====+Note: Both the email address (e.g. "user@example.com") and the user ID (e.g. "1957f847-f298-4f14-a031-7ffbe31aeb47") can be used for " username"
 +==== /api/v2/authenticate ==== 
 + 
 +[POST] In order to obtain a session cookie you can use the authentication endpoint.
  
-A POST http request to the API endpoint “/api/v2/authenticate” does log in the user and the response contains the set-cookie header with the generated cookie. 
-HTTP header fields: 
-| <user_id> [required]: | The user_id corresponds to the username or e-mail address of the user. | 
-| ::: |Either <user_email> or <user_id> have to be specified.| 
-| <user_email> [required]: |The user_email corresponds to the e-mail address of the user. | 
-| ::: |Either <user_email> or <user_id> have to be specified.| 
-|<user_secret> [required]: |The user_secret corresponds to the password of the user.| 
 === Examples === === Examples ===
-== Request HTTP == + 
-Example request: +== HTTP ==
 <code> <code>
-https://example.protogrid.com/api/v2/authenticate +POST /api/v2/authenticate 
-</code> +Host: example.protogrid.com 
-Request header:  +username: example_user 
-<code json> +passwordtest_password
-+
- POST /api/v2/authenticate +
- Host: your_environment.protogrid.com +
- user_id: example_user +
- user_secretexample_secret +
-}+
 </code> </code>
-== Request jQuery == 
-Example in jQuery: 
  
-<code jquery>+== jQuery == 
 +<code javascript>
 $.ajax({ $.ajax({
-    type:'POST', +  type:'POST', 
-    url: 'https://example.protogrid.com/api/v2/authenticate', +  url: 'https://example.protogrid.com/api/v2/authenticate', 
-    contentType: 'application/json; charset=utf-8', +  contentType: 'application/json; charset=utf-8', 
-    dataType: 'json', +  dataType: 'json', 
-    beforeSend: function(xhr){ +  beforeSend: function(xhr){ 
-        xhr.setRequestHeader('user_id','tester@test.com'); +      xhr.setRequestHeader('username','testuser@example.com'); 
-        xhr.setRequestHeader('user_secret','test_password'); +      xhr.setRequestHeader('password','test_password'); 
-    }+  }
 }); });
 </code> </code>
  
-== Request Python == +== Python ==
-Example in Python (with requests):+
 <code python> <code python>
 +import requests
 url = "https://example.protogrid.com/api/v2/authenticate" url = "https://example.protogrid.com/api/v2/authenticate"
-headers = dict(user_id="test_user@testdomain.com", user_secret="test_password")+headers = dict(username="testuser@example.com", user_secret="test_password")
 req = requests.post(url, headers=headers) req = requests.post(url, headers=headers)
 response = req.text response = req.text
 response = json.loads(response) response = json.loads(response)
 cookie = req.cookies['session'] cookie = req.cookies['session']
 +</code>
 +
 +== Request Axios ==
 +<code javascript>
 +const axios = require('axios');
 +axios.post('https://example.protogrid.com/api/v2/authenticate', {}, {
 +  headers: {
 +    'Content-Type': 'application/json; charset=utf-8',
 +    'username': 'testuser@example.com',
 +    'password': 'test_password'
 +  }
 +})
 +.then((result) => {
 +  console.log('Authentication Success.');
 +  var cookies_from_resp = res.headers['set-cookie'];
 +  var cookie_for_session = cookies_from_resp[0].split(';').[0];
 +  
 +  // send authenticated http request here (see documentation below)
 +})
 +.catch((error) => {
 +  console.error('Authentication Error: ' + error);
 +});
 </code> </code>
  
Line 58: Line 72:
 <code json> <code json>
 { {
- "errors": [], +  "errors": [], 
- "protogrid_environment_version": "1.3.9", +  "protogrid_environment_version": "2.3.0", 
- "result": "Login successful!"+  "result": "Login successful!"
 } }
 </code> </code>
Line 68: Line 82:
 <code json> <code json>
 { {
- “errors”:+  “errors”:
- +    
- “code”: 401+      “code”: 403
- “message”: “Your login wasn’t recognized. Please check your e-mail +      “message”: “Your login wasn’t recognized.” 
- address and password.” +    
- +  ],  
- ],  +  "protogrid_environment_version": "2.3.0", 
- "protogrid_environment_version": "1.3.9", +  “result”: {}
- “result”: {}+
 } }
 </code> </code>
Line 89: Line 102:
 <code jquery> <code jquery>
 $jq.ajax({ $jq.ajax({
-        type: 'GET', +  type: 'GET', 
-        url: 'https://example.protogrid.com/api/v2/apps', +  url: 'https://example.protogrid.com/api/v2/apps', 
-        contentType: 'application/json; charset=utf-8', +  contentType: 'application/json; charset=utf-8', 
-        dataType: 'json', +  dataType: 'json', 
-        success: function(data) { +  success: function(data) { 
-                console.log(data); +          console.log(data); 
-        }, +  }, 
-        error: function(data) { console.log(data); }+  error: function(data) { console.log(data); }
 }); });
 </code> </code>
Line 104: Line 117:
 Example Python request: Example Python request:
 <code python> <code python>
-The cookie variable was set above in the authenticate example.+The cookie variable was set above in the authenticate example.
 url = "https://example.protogrid.com/api/v2/apps" url = "https://example.protogrid.com/api/v2/apps"
 req = requests.get(url, cookies=cookie) req = requests.get(url, cookies=cookie)
Line 111: Line 124:
 </code> </code>
 Note: For more information about the requests, please refer to http://docs.python-requests.org/en/master/ Note: For more information about the requests, please refer to http://docs.python-requests.org/en/master/
 +
 +== Example Axios ==
 +Example request with Axios:
 +<code javascript>
 +axios.get('https://example.protogrid.com/api/v2/apps', {
 +  headers: {
 +    'Content-Type': 'application/json; charset=utf-8',
 +    'Cookie': cookie_for_session // The cookie_for_session variable was set above in the authenticate example.
 +  }
 +})
 +.then((result) => {
 +  console.log('Inner Success.');
 +  console.log(result.data);
 +})
 +.catch((error) => {
 +  console.log('Inner Error: ' + error);
 +});
 +</code>
  
Print/export