Auth with React
See original GitHub issueDescribe the bug
Hey all,
Thanks for a great library!
I have with success implemented the auth workflow with FastAPI and OpenAPI following your documentation
I have a React frontend that needs to talk to the FastAPI backend and I have trouble getting it to work. I use the "@azure/msal-browser"
package to get the access token in React, but when I send it in the header to FastAPI I get the following error:
Traceback (most recent call last):
File "/app/.local/lib/python3.9/site-packages/fastapi_azure_auth/auth.py", line 183, in __call__
token = jwt.decode(
File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 144, in decode
raise JWTError(e)
jose.exceptions.JWTError: Signature verification failed.
INFO: 127.0.0.1:36092 - "GET /api/project/a833b3ff30 HTTP/1.1" 401 Unauthorized
I have followed the same steps as for OpenAPI to setup my React SPA in Azure.
To Reproduce
- Go to React UI
- Login to Azure
- Catch the token from the callback
- Set the token in the header
- Call FastAPI
Stack trace
[backend] INFO: 127.0.0.1:36088 - "OPTIONS /api/project/a833b3ff30 HTTP/1.1" 200 OK
[backend] 2022-04-21 12:40:18,023 WARNING fastapi_azure_auth __call__() Malformed token received. null. Error: Error decoding token headers.
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 176, in _load
[backend] signing_input, crypto_segment = jwt.rsplit(b".", 1)
[backend] ValueError: not enough values to unpack (expected 2, got 1)
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 183, in get_unverified_header
[backend] headers = jws.get_unverified_headers(token)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 109, in get_unverified_headers
[backend] return get_unverified_header(token)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 90, in get_unverified_header
[backend] header, claims, signing_input, signature = _load(token)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 180, in _load
[backend] raise JWSError("Not enough segments")
[backend] jose.exceptions.JWSError: Not enough segments
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/fastapi_azure_auth/auth.py", line 136, in __call__
[backend] header: dict[str, str] = jwt.get_unverified_header(token=access_token) or {}
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 185, in get_unverified_header
[backend] raise JWTError("Error decoding token headers.")
[backend] jose.exceptions.JWTError: Error decoding token headers.
[backend] INFO: 127.0.0.1:36088 - "GET /api/project/a833b3ff30 HTTP/1.1" 401 Unauthorized
[backend] 2022-04-21 12:40:18,150 WARNING fastapi_azure_auth __call__() Invalid token. Error: Signature verification failed.
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 262, in _verify_signature
[backend] raise JWSSignatureError()
[backend] jose.exceptions.JWSSignatureError
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 142, in decode
[backend] payload = jws.verify(token, key, algorithms, verify=verify_signature)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 73, in verify
[backend] _verify_signature(signing_input, header, signature, key, algorithms)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 264, in _verify_signature
[backend] raise JWSError("Signature verification failed.")
[backend] jose.exceptions.JWSError: Signature verification failed.
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/fastapi_azure_auth/auth.py", line 183, in __call__
[backend] token = jwt.decode(
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 144, in decode
[backend] raise JWTError(e)
[backend] jose.exceptions.JWTError: Signature verification failed.
[backend] INFO: 127.0.0.1:36088 - "GET /api/project/a833b3ff30 HTTP/1.1" 401 Unauthorized
[backend] 2022-04-21 12:43:06,084 WARNING fastapi_azure_auth __call__() Malformed token received. null. Error: Error decoding token headers.
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 176, in _load
[backend] signing_input, crypto_segment = jwt.rsplit(b".", 1)
[backend] ValueError: not enough values to unpack (expected 2, got 1)
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 183, in get_unverified_header
[backend] headers = jws.get_unverified_headers(token)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 109, in get_unverified_headers
[backend] return get_unverified_header(token)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 90, in get_unverified_header
[backend] header, claims, signing_input, signature = _load(token)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 180, in _load
[backend] raise JWSError("Not enough segments")
[backend] jose.exceptions.JWSError: Not enough segments
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/fastapi_azure_auth/auth.py", line 136, in __call__
[backend] header: dict[str, str] = jwt.get_unverified_header(token=access_token) or {}
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 185, in get_unverified_header
[backend] raise JWTError("Error decoding token headers.")
[backend] jose.exceptions.JWTError: Error decoding token headers.
[backend] INFO: 127.0.0.1:36092 - "GET /api/project/a833b3ff30 HTTP/1.1" 401 Unauthorized
[backend] 2022-04-21 12:43:06,334 WARNING fastapi_azure_auth __call__() Invalid token. Error: Signature verification failed.
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 262, in _verify_signature
[backend] raise JWSSignatureError()
[backend] jose.exceptions.JWSSignatureError
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 142, in decode
[backend] payload = jws.verify(token, key, algorithms, verify=verify_signature)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 73, in verify
[backend] _verify_signature(signing_input, header, signature, key, algorithms)
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jws.py", line 264, in _verify_signature
[backend] raise JWSError("Signature verification failed.")
[backend] jose.exceptions.JWSError: Signature verification failed.
[backend]
[backend] During handling of the above exception, another exception occurred:
[backend]
[backend] Traceback (most recent call last):
[backend] File "/app/.local/lib/python3.9/site-packages/fastapi_azure_auth/auth.py", line 183, in __call__
[backend] token = jwt.decode(
[backend] File "/app/.local/lib/python3.9/site-packages/jose/jwt.py", line 144, in decode
[backend] raise JWTError(e)
[backend] jose.exceptions.JWTError: Signature verification failed.
[backend] INFO: 127.0.0.1:36092 - "GET /api/project/a833b3ff30 HTTP/1.1" 401 Unauthorized
Issue Analytics
- State:
- Created a year ago
- Comments:6 (4 by maintainers)
Top Results From Across the Web
How To Add Login Authentication to React Applications
How To Add Login Authentication to React Applications · Step 1 — Building a Login Page · Step 2 — Creating a Token...
Read more >The Complete Guide to React User Authentication with Auth0
The focus of this tutorial is to help developers learn how to secure a React application by implementing user authentication.
Read more >React Authentication & Access Control
Your React app requests a JWT from the authentication server whenever the user wants to sign on. The authentication server generates a JWT...
Read more >How to Add Authentication to React Applications
In this article, we'll explore with the help of a demo, how to set up authentication in a Create React App.
Read more >How to Build a React App with User Authentication
User authentication is the process of securing user information through the use of some parameters like username, password, and more.
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Thanks for the help @JonasKs! So it turns out that I fucked up 🤦 The mistake was in the React code. Anyways I’m just going to explain below for anyone in the future.
The issue was that I had my
accessTokenRequest
without the id of the backend app registrationGlad you figured it out, and thanks for providing an example for future reference.
Have a good week 😊