How to pass basic auth credentials in API call for a Flutter mobile application?
Asked Answered
H

2

55

I'm working on a simple Flutter mobile app that needs to call out to an API that uses Basic Auth.

I can hit the API in Postman using email & password credentials and it encodes the email & password in Base64 (I assume with a ":" separating) before performing the request.

I'm not sure how to do this in Flutter / Dart...

I've tinkered with the http package and tried to do the Base64 encoding... but I just get back errors from the server.

Can anyone provide some guidance or an example for a basic auth request?

Hardspun answered 9/5, 2018 at 1:50 Comment(0)
A
146

Assuming that your server expects that the username:password combo will be encode it UTF-8 (see RFC 7617 for more details) then use this:

import 'dart:convert';
    
import 'package:http/http.dart';
    
main() async {
  String username = 'test';
  String password = '123£';
  String basicAuth =
      'Basic ' + base64.encode(utf8.encode('$username:$password'));
  print(basicAuth);
    
  Response r = await get(Uri.parse('https://api.somewhere.io'),
      headers: <String, String>{'authorization': basicAuth});
  print(r.statusCode);
  print(r.body);
}
Anecdotal answered 9/5, 2018 at 2:19 Comment(6)
Perfect! I could piece together the http bits, but couldn't figure out how to actually build the header. Just tested this out and it works perfectlyHardspun
you can use http post if header is required, eg : final loginResponse = await client.post(loginUrl, body: json.encode(user), headers: header);Rappel
Hi, I want to use oAuth1 instead of basic as I am not on HTTPS, I am on HTTP, any recommendation for that?Griffey
Prebuilding the Header-map requires strong types in the Map: medium.com/@hagenverfolgt/…Oared
In my case, this causes an forever pending request. Any idear why?Assiduous
I have a question, what to add in this case if the request contains additional parameters such as the domain name? Any idea if it is the modification in the headers and how it is written? Thanks in advance.Interplay
P
23

I know it's late but I am posting this if it can help others.

import 'dart:convert';

var auth = 'Basic '+base64Encode(utf8.encode('$username:$password'));

Future<Response> callAPI(param) async {
    await dio.post('/api/test',
        data: {'param': param},
        options: Options(headers: <String, String>{'authorization': auth})); 
  }
Payroll answered 13/12, 2019 at 9:58 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.