Flutter web,向具有自签名证书的服务器发出请求的问题

问题描述 投票:5回答:1

我正面临Flutter Web的第一个大问题。

我必须通过对具有自签名ssl证书的服务器的邮寄呼叫,使用oauth2登录。

使用http和dio客户端发出请求,我收到了net :: ERR_CERT_AUTHORITY_INVALID。我在网上发现的唯一方法是使用HttpClient,它适用于android和IO,但dart:io在Web构建中不起作用。有没有一种方法可以信任我的ssl证书以获取Flutter Web?

       // My simple line of code
      var response = await client.post(authorizationEndpoint.toString(), body: body, headers: headers);
      // What I am looking for 
      var response = await client.post(authorizationEndpoint.toString(), 
                               body: body, headers: headers, 
                       --->    trustanyCA: true);
flutter ssl-certificate self-signed flutter-web
1个回答
0
投票

您可以使用https://pub.dev/packages/universal_io包。除了Android和iOS,它还支持网络。

dependencies:
  universal_io: ^1.0.1

执行以下导入,而不是dart:io

import 'package:universal_io/io.dart';

其工作方式相同。

import 'package:universal_io/io.dart';

Future<void> main() async {
  final request = HttpClient().getUrl(Uri.parse('https://example.com/path'));

  if (request is BrowserHttpClientRequest) {
    request.credentialsMode = BrowserHttpClientCredentialsMode.include;
  }

  final response = await request.close();
  // ...
}

编辑:

尝试一下,因为它似乎不适用于String,请尝试使用Bytes方法并遵循证书的路径。

ByteData data = await rootBundle.load('assets/raw/certificate.crt');
SecurityContext context = SecurityContext.defaultContext;
context.setTrustedCertificatesBytes(data.buffer.asUint8List());
client = HttpClient(context: context);
© www.soinside.com 2019 - 2024. All rights reserved.