# Signing Algorithms

Signing algorithms are algorithms used to sign tokens issued for your application or API. A signature is part of a JSON Web Token (JWT) and is used to verify that the sender of the token is who it says it is and to ensure that the message wasn't changed along the way.

You can select from the following signing algorithms:

* **RS256 (RSA Signature with SHA-256):** An asymmetric algorithm, which means that there are two keys: one public key and one private key that must be kept secret. Login 3.0 has the private key used to generate the signature, and the consumer of the JWT retrieves a public key from the metadata endpoints provided by Login 3.0 and uses it to validate the JWT signature.
* **HS256 (HMAC with SHA-256):** A symmetric algorithm, which means that there is only one private key that must be kept secret, and it is shared between the two parties. Since the same key is used both to generate the signature and to validate it, care must be taken to ensure that the key is not compromised. This private key (or secret) is created when you register your application (client secret) or API (signing secret) and choose the HS256 signing algorithm.
* **PS256 (RSA Signature with SHA-256):** An asymmetric algorithm, which means that there are two keys: one public key and one private key that must be kept secret. Login 3.0 has the private key used to generate the signature, and the consumer of the JWT retrieves a public key from the metadata endpoints provided by Login 3.0 and uses it to validate the JWT signature. Unlike RS256, the same JWT header and payload will generate a different signature each time.

The most secure practice, and our recommendation, is to use **RS256** because:

1. With RS256, you are sure that only the holder of the private key (Login 3.0) can sign tokens, while anyone can check if the token is valid using the public key.
2. With RS256, if the private key is compromised, you can implement key rotation without having to re-deploy your application or API with the new secret (which you would have to do if using HS256).
