Hi Habrovtsy! 

Today I will talk about authentication methods in 
QuickBlox . As well as affect the authorization and its aspects.
So, any request to the 
QuickBlox API must be followed by a 
token . Anyone other than the authorization request itself. There are 4 possible authorization entities in 
QuickBlox :
- attachment
 - user
 - device
 - device user
 
An application is an entity with ReadOnly rights. With an 
application token, for example, we can fulfill many requests for information, such as requests for Ratings or Location. The only write operation available with the 
application token is user creation. This entity is authenticated with the following data set:
- Application id
 - Authorization key
 - Authorization secret
 
This data set is standard for authentication of all entities and can be found in the application settings:

')
A user is an entity that has access to all types of operations with an API, except perhaps for device-related operations, such as registering for receiving Push messages. 
The user is authenticated in the same way as the 
application , but is added to the fields.
- user [login]
 - user [password]
 - user [owner_id]
 
A device is an entity that is not much different from an 
application . 
There is no write 
permission either. The only difference is that it is possible to track the devices on which the application is installed. Entity 
device to the fields of the 
application adds
- device [udid]
 - device [platform]
 
The device user is the main authorization entity for which all possible operations with the 
QuickBlox API are 
available . For authentication uses all the previous paragraphs.
And now more about the generation 
token . The 
token key is generated in the depths of 
QuickBlox in response to a 
POST authentication request by requesting 
http://api.quickblox.com/session with the following fields:
| application | 
| application_id | Application id | 
| auth_key | Application key | 
| timestamp | Time in the Unix format of the era, which may differ from the server time by 1 hour. | 
| nonce | Random number | 
| signature | Signature | 
| User | 
| user [login] | User login | 
| user [password] | User password | 
| user [owner_id] | User Owner. From May 30, 2012 this field will be accepted, but ignored, i.e. it can be omitted. | 
| Device | 
| device [platform] | Device platform - ios, android or windows_phone | 
| device [udid] | Unique device identifier | 
The user of the application uses all the described 
POST fields.
Learn more about creating a 
signature . The signature is generated by encryption using the 
HMAC-SHA1 mechanism. The encryption 
body is a string of POST request fields in the form of a GET request, i.e. fields are separated by an 
ampersad . Also the fields are sorted alphabetically. 
The encryption 
key is the 
Authorization secret , described earlier.
Example of creating a signature in PHP:
$body="application_id=$app_id&auth_key=$auth_key&device[platform]=$device_platform&device[udid]=$device_udid&nonce=$nonce×tamp=$timestamp&user[login]=$user_login&user[owner_id]=$owner_id&user[password]=$user_password"; $signature=hash_hmac('sha1',$body,$auth_secret); 
Here you can see more conveniently: 
http://pastebin.com/FhS5YEqR .
When you create a session, we are given information about the session. The default format is XML. But, specifying the URI ".json" in the box, the answer will come in the JSON format.
Here is an example of a 
user authentication request:
 curl -X POST -H "Content-Type: application/json" -d '{"application_id": "2", "auth_key": "DtF9cZPqTF8Wy9Q", "timestamp": "1333630580", "nonce": "1340569516", "signature": "13293a5bd2026b957ebbb36c89d9649aae9e5503", "user": {"login": "injoit", "password": "injoit", "owner_id": "4"}}' https://api.quickblox.com/auth.json 
Here is an example of a response to a 
user authentication request:
 { "session": { "application_id": 2, "created_at": "2012-04-03T07:41:12Z", "device_id": null, "id": 744, "nonce": 289239351, "token": "25b29b8c8d6f2d3afbf1d437cc611b23741fc7ee", "ts": 1333438822, "updated_at": "2012-04-03T07:41:13Z", "user_id": 3 } 
Also, for example, we can upgrade the 
application token by logging in the 
user with it:
 curl -X POST -H "Content-Type: application/json" -d '{"login": "injoit", "password": "injoit", "owner_id": "4", "token": "cf5709d6013fdb7a6787fbeb8340afed8aec4c69"}' http://api.quickblox.com/login.json { "blob_id": null, "created_at": "2012-01-16T08:13:38Z", "custom_parameters": null, "email": null, "external_user_id": 111, "facebook_id": null, "full_name": null, "id": 3, "last_request_at": "2012-04-04T10:27:40Z", "login": "injoit", "owner_id": 4, "phone": null, "twitter_id": null, "updated_at": "2012-04-04T10:27:40Z", "website": null, "user_tags":"superman" } 
After this, the application token will already become the user's token.
The session is destroyed either by a direct DELETE request at 
http://api.quickblox.com/auth_exit , or after an hour of inactivity, the system will remove the token itself.
 curl -X DELETE "https://api.quickblox.com/auth_exit?token=422ce2791d7070b88a82f415b3693c81612e3423" 
The main documentation for this section is on the Developers: 
Authentication and Authorization page.
Comment. Recently, the token in the GET, PUT, POST and DELETE request parameters has been abolished (deprecated), the request headers have become the main place to specify the token.
 curl -X POST -H "QB-Token: cf5709d6013fdb7a6787fbeb8340afed8aec4c69" 
This is an important security update, so all existing SDK and samples will be updated accordingly.
For any questions about clarification, cooperation or just using 
QuickBlox, you can contact me at 
korjik and Taras 
qbtarzan or by email 
andrey.kozhokaru@quickblox.com .