micropython / micropython-lib

Core Python libraries ported to MicroPython
Other
2.44k stars 1k forks source link

Feature request: support for the HTTP Digest authentication on the requests and/or the aiohttp #869

Open beyonlo opened 6 months ago

beyonlo commented 6 months ago

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:

  1. requests (https://github.com/micropython/micropython-lib/tree/master/python-ecosys/requests) - It is sync, and support HTTP Basic authentication, but does not support HTTP Digest authentication
  2. aiohttp (https://github.com/micropython/micropython-lib/tree/master/python-ecosys/aiohttp/aiohttp) - It is async, and does not support HTTP Basic authentication and does not support HTTP Digest authentication as 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!

massimosala commented 5 months ago

Hi @beyonlo

I think this request (pun intended) doesn't gain much attention because

beyonlo commented 5 months ago

Hello @massimosala

I think this request (pun intended) doesn't gain much attention because

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.

jonnor commented 3 months ago

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