gpt4 book ai didi

flutter - 使用自签名证书时Flutter OAuth请求失败

转载 作者:行者123 更新时间:2023-12-03 03:00:10 27 4
gpt4 key购买 nike

我有一台支持带有授权码授予的oauth2.0的服务器。服务器使用自签名证书,该证书已在我的android设备上手动安装。我正在使用标准的oauth2库https://pub.dev/packages/oauth2执行oauth流。现在一切正常,直到这一步

var client = await grant.handleAuthorizationResponse(responseUrl.queryParameters);

客户端必须使用授权期间获取的代码进行发布请求才能获得访问 token 。 (请参阅 https://pub.dev/packages/oauth2#authorization-code-grant的示例)
在这里我得到一个
HandshakeException: Handshake error in client (OS Error: 
E/flutter (11483): CERTIFICATE_VERIFY_FAILED: self signed certificate in certificate

现在,我已经知道如何使用HttpClient对象允许我的证书或完全绕过证书检查。问题是,HttpClient是dart._http库的一部分,该库位于http.dart下,但是oauth2.dart使用的客户端对象来自client.dart下的http库。即使它们似乎都是http客户端并支持post方法,但只有前者支持自定义SecurityContext。而且显然没有办法我可以将其中一个投向另一个。我有一个两部分的问题:
  • 有人对此OAuth2.0库有类似的经验,或者知道我是否可以使其完全与我的自签名证书一起使用?
  • 我的最新想法是创建一个扩展http.BaseClient的自定义客户端类。因为我注意到OAuth2.0仅使用来自客户端对象的post方法,所以我考虑重写此方法,并使用HttpClient对象执行post请求。但是,来自HttpClient的post方法仅采用一个Uri,而来自BaseClient的post方法采用url, header ,正文和编码。知道如何在HttpClient的请求上设置它们吗?

  • 我也研究了oauth2_client,但它甚至不支持自定义的http客户端和oauth_dio,但是它仅实现客户端凭据授予,而我的服务器仅支持授权代码授予。

    最佳答案

    DART OPTION 1

    看起来Dart有自己的根证书。首选选项是避免编写任何安全代码。相反,在开发环境中,根据this guide,将自签名主机的根证书配置为Dart信任的。

    DART OPTION 2

    看起来Dart也支持C#证书回调模型,其中有一个Bad Certificate Callback您可以覆盖。不知道您是否必须子类化HttpClient才能实现此目的。

    /* PSEUDOCODE */
    bool callback(X509Certificate cert, String host, int port) {

    // Don't allow any exceptions in production
    if (currentEnvironment == "DEV" && host == "myhost.com") {
    return true;
    }

    // Use system
    return base.callback(cert, host, port)

    }

    移动OUTH建议

    我看到您正在尝试一些不同的库来解决您的SSL信任问题。因此,我想指出与 mobile security standards一致的移动OAuth库中要查找的内容,这些是关键建议:
  • 使用授权码流(PKCE)
  • 通过系统浏览器登录
  • 首选HTTPS重定向URL(声称的HTTPS方案)

  • 我至少打算使用上面的正确流程。我对新技术堆栈及其OAuth库始终保持警惕,因为它们通常不实现建议的行为。

    从安全 Angular 来看,首选的库可能是 Flutter AppAuth。我经常使用带有自签名证书的AppAuth库,但是AppAuth库面临以下挑战:
  • 在系统浏览器上登录很难使
  • 可靠
  • 可能比您的涉众想要支付
  • 多得多的工作
  • 用户体验方面可能不同于人们习惯使用
  • Flutter桥可能会出现自己的问题

  • 我的APP认证资源

    当您有时间时,可能值得浏览我的博客文章并运行我的Swift / Kotlin代码示例,以查看您是否认为以下行为对您有用:
  • Android Behaviour
  • Steps to run Android Code Sample
  • iOS Behaviour
  • Steps to run iOS Code Sample
  • 关于flutter - 使用自签名证书时Flutter OAuth请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62443327/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com