Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

http

flutter

dart

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?

like image 415
Eric Wilhite Avatar asked May 09 '18 01:05

Eric Wilhite


People also ask

How do you pass Basic Authentication in header flutter?

HTTP Request with Basic Authentication in Flutter Remembering that Basic Authentication requires that username:password to be Base64 encoded, which in Flutter is done through the Base64Encoder class (https://api.dartlang.org/stable/2.7.0/dart-convert/Base64Encoder-class.html).

How do I pass API credentials?

You can pass in the API Key to our APIs either by using the HTTP Basic authentication header or by sending an api_key parameter via the query string or request body. If you use our client library CARTO. js, you only need to follow the authorization section and we will handle API Keys automatically for you.


2 Answers

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 ' + base64Encode(utf8.encode('$username:$password'));   print(basicAuth);        Response r = await get('https://api.somewhere.io',       headers: <String, String>{'authorization': basicAuth});   print(r.statusCode);   print(r.body); } 
like image 186
Richard Heap Avatar answered Oct 13 '22 23:10

Richard Heap


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}));    } 
like image 39
Nitish Avatar answered Oct 13 '22 23:10

Nitish