Client authentication: Difference between revisions

From LRREW
Jump to navigation Jump to search
m (Clockwork moved page 2016:Clienttickets to Network:Tickets: More accurate name)
m (Clockwork moved page Network:Tickets to Client authentication)
(No difference)

Revision as of 06:33, 1 July 2023

Client Tickets

Client tickets are an integral part of authenticating clients in the 2016 client.

Format

Client tickets follow a specific structure for it to be parsed by RCC. Client tickets utilize script signing, so make sure you have a private key to sign these with.

First off, there are two signatures that are combined and then sent to RCC. The first signature's format is as follows:

userid
username
charapp url
jobid
unix timestamp

(keep in mind: replace the newlines with \n)

The second signature's format is as follows:

userid
jobid
unix timestamp

(keep in mind: replace the newlines with \n)

And after creating those two signatures, you have to sign those two signatures individually. Using [PHP], you could use [openssl_sign] to sign these using the OPENSSL_ALGO_SHA1 algorithm.

After signing those two signatures, you are at the final step. Assemble the ticket that will be sent to RCC by using this format:

unix timestamp;base64 encoded first signature;base64 encoded second signature

After you create the client ticket, you can pass it along in the joinscript.

Notice

You MUST use the SetIsPlayerAuthenticationRequired (under the NetworkServer service) method in your hostscript. You must set it to true, as it is disabled by default. If you have this disabled, it will skip the entire clientticket check.

pcall(function() game:GetService("NetworkServer"):SetIsPlayerAuthenticationRequired(true) end)