BMW-i-Remote icon indicating copy to clipboard operation
BMW-i-Remote copied to clipboard

API Server authentication issues

Open rs38 opened this issue 5 years ago • 5 comments

needs to be done via https://customer.bmwgroup.com/gcdm/oauth/authenticate

please see #23

rs38 avatar Feb 16 '20 16:02 rs38

https://github.com/bimmerconnected/bimmer_connected/pull/151

rs38 avatar Feb 16 '20 16:02 rs38

resolv: auth.txt

havrla avatar Feb 21 '20 14:02 havrla

BASE_URL = 'customer.bmwgroup.com'
#BASE_URL = 'b2vapi.bmwgroup.com'

def getToken(BASE_URL, username, password, timeout=(20, 20)):
    try:
        headers = {
                "Content-Type": "application/x-www-form-urlencoded",
                "Content-Length": "124",
                "Connection": "Keep-Alive",
                "Host": BASE_URL,
                "Accept-Encoding": "gzip",
                "Authorization": "Basic blF2NkNxdHhKdVhXUDc0eGYzQ0p3VUVQOjF6REh4NnVuNGNEanli"
                                 "TEVOTjNreWZ1bVgya0VZaWdXUGNRcGR2RFJwSUJrN3JPSg==",
                "Credentials": "nQv6CqtxJuXWP74xf3CJwUEP:1zDHx6un4cDjybLENN3kyfumX2kEYigWPcQpdvDRpIBk7rOJ",
                "User-Agent": "okhttp/2.60"}

        data = {
            'client_id': 'dbf0a542-ebd1-4ff0-a9a7-55172fbfce35',
            'response_type': 'token',
            'redirect_uri': 'https://www.bmw-connecteddrive.com/app/static/external-dispatch.html',
            'scope': 'authenticate_user vehicle_data remote_services',
            'username': username,
            'password': password}

        data = urllib.parse.urlencode(data)#       url = 'https://' + BASE_URL + '/webapi/oauth/token'
#        url = 'https://' + BASE_URL + '/webapi/oauth/token'
        url = 'https://' + BASE_URL + '/gcdm/oauth/authenticate'
        #print (url)
        r = requests.post(url, data=data, headers=headers, allow_redirects=False)
        #print (r)
        if r.status_code == 302:
            logging.info('Access token acquired')
            response_json = dict(
                    urllib.parse.parse_qsl(urllib.parse.urlparse(r.headers['Location']).fragment)
                )
            #print(response_json)
            #print(response_json['access_token'])
            return response_json['access_token']
        else:
            raise ValueError('Unable to login')

    except Exception as msg:
        logging.error(msg)

havrla avatar Nov 22 '20 22:11 havrla

I am also experiencing problems, but they also have some issues on the web login right now. I'm not able to login here: https://www.bmw-connecteddrive.de/app/index.html#/portal

rs38 avatar Nov 26 '20 17:11 rs38

it turns out that my root cause issue since last weekend is that they need TLS 1.2 enabled. Not sure how python deals with it, with .NET webclient it's ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

rs38 avatar Nov 26 '20 18:11 rs38