mirror of
https://github.com/fastapi-users/fastapi-users.git
synced 2025-08-18 14:41:20 +08:00

* Revamp authentication to allow multiple backends * Make router generate a login route for each backend * Apply black * Remove unused imports * Complete docstrings * Update documentation * WIP add cookie auth * Complete cookie auth unit tests * Add documentation for cookie auth * Fix cookie backend default name * Don't make cookie return a Response
55 lines
1.7 KiB
Markdown
55 lines
1.7 KiB
Markdown
# JWT
|
|
|
|
JSON Web Token (JWT) is an internet standard for creating access tokens based on JSON.
|
|
|
|
## Configuration
|
|
|
|
```py
|
|
from fastapi_users.authentication import JWTAuthentication
|
|
|
|
SECRET = "SECRET"
|
|
|
|
auth_backends = []
|
|
|
|
jwt_authentication = JWTAuthentication(secret=SECRET, lifetime_seconds=3600))
|
|
|
|
auth_backends.append(jwt_authentication)
|
|
```
|
|
|
|
As you can see, instantiation is quite simple. You just have to define a constant `SECRET` which is used to encode the token and the lifetime of token (in seconds).
|
|
|
|
You can also optionally define the `name` which will be used to generate its [`/login` route](../../usage/routes.md#post-loginname). **Defaults to `jwt`**.
|
|
|
|
```py
|
|
jwt_authentication = JWTAuthentication(
|
|
secret=SECRET,
|
|
lifetime_seconds=3600,
|
|
name="my-jwt",
|
|
)
|
|
```
|
|
|
|
## Login
|
|
|
|
This method will return a JWT token upon successful login:
|
|
|
|
!!! success "`200 OK`"
|
|
```json
|
|
{
|
|
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiOTIyMWZmYzktNjQwZi00MzcyLTg2ZDMtY2U2NDJjYmE1NjAzIiwiYXVkIjoiZmFzdGFwaS11c2VyczphdXRoIiwiZXhwIjoxNTcxNTA0MTkzfQ.M10bjOe45I5Ncu_uXvOmVV8QxnL-nZfcH96U90JaocI"
|
|
}
|
|
```
|
|
|
|
> Check documentation about [login route](../../usage/routes.md#post-loginname).
|
|
|
|
## Authentication
|
|
|
|
This method expects that you provide a `Bearer` authentication with a valid JWT.
|
|
|
|
```bash
|
|
curl http://localhost:9000/protected-route -H'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiOTIyMWZmYzktNjQwZi00MzcyLTg2ZDMtY2U2NDJjYmE1NjAzIiwiYXVkIjoiZmFzdGFwaS11c2VyczphdXRoIiwiZXhwIjoxNTcxNTA0MTkzfQ.M10bjOe45I5Ncu_uXvOmVV8QxnL-nZfcH96U90JaocI'
|
|
```
|
|
|
|
## Next steps
|
|
|
|
We will now configure the main **FastAPI Users** object that will expose the [API router](../router.md).
|