Feature request: support for the HTTP Digest authentication on the requests and/or the aiohttp
Hi all!
I need to communicate with some products that have an API that support only HTTP Digest authentication, I mean, they do not support HTTP Basic authentication and it is not possible to disable the authentication.
I see that MicroPython has two HTTP client libs that can be used for that purpose:
requests(https://github.com/micropython/micropython-lib/tree/master/python-ecosys/requests) - It issync, and supportHTTP Basic authentication, but does not supportHTTP Digest authenticationaiohttp(https://github.com/micropython/micropython-lib/tree/master/python-ecosys/aiohttp/aiohttp) - It isasync, and does not supportHTTP Basic authenticationand does not supportHTTP Digest authenticationas well.
I see there is this uwwwauth.py -> https://github.com/pfalcon/pycopy-lib/blob/master/uwwwauth/uwwwauth.py that is a support for HTTP Digest authentication for the pycopy (It seems to be like as old fork of MicroPython). Can that help to support HTTP Digest authentication on the requests and/or aiohttp http clients?
Is it a simple or difficult task to support HTTP Digest authentication on the MicroPython requests/aiohttp? If I were to choose just one that http client libs to be supported by the HTTP Digest authentication, I would like to be the aiohttp because it is async (asyncio), so I do not need to use threads to have a non blocking code. But if is supported just on the requests lib, is very good as well.
Thank you in advance!
Hi @beyonlo
I think this request (pun intended) doesn't gain much attention because
-
HTTP Digest auth has a gazillion of flavours https://en.wikipedia.org/wiki/Digest_access_authentication
-
nowadays most of web sites use OAuth
Hello @massimosala
I think this request (pun intended) doesn't gain much attention because
- HTTP Digest auth has a gazillion of flavours https://en.wikipedia.org/wiki/Digest_access_authentication
So, the digest auth supported on cpython requests (code below) and aiohttp implements all that "gazillion" flavours?
import requests
from requests.auth import HTTPDigestAuth
url='https://example.com/cgi/metadata.cgi?template=html'
r = requests.get(url, auth=HTTPDigestAuth('myUsername', 'myPassword'), verify=False, stream=True)
print(r.headers)
print(r.status_code)
- nowadays most of web sites use OAuth
Understood. But many devices support only Digest Auth in the API. I already running it using cpython requests - works ok - but I need to use micropython.
The code for HTTPDigestAuth in requests for CPython can be found here: https://github.com/psf/requests/blob/a3ce6f007597f14029e6b6f54676c34196aa050e/src/requests/auth.py#L107
If that does what you need, then I recommend copying that code and porting it to MicroPython