Flutter

关于OAuth2.1 PKCE利用crypto的sha256哈希结果转换base64url计算结果不一致的问题(Flutter)

前言

最近在写第三方flutter app并抓包分析某原生app登录逻辑的时候,遇到了使用OAuth2.1 PKCE授权码模式的登录方式,该模式下需要将code_verifier先进行sha256哈希后再进行base64(URL-Save) 编码成最终的code_challenge。

OAuth2.1 PKCE授权码模式详解:https://shanhy.blog.csdn.net/article/details/114080598

code_verifier转code_challenge的工具:https://tonyxu-io.github.io/pkce-generator/

问题详情

  1. 在对code_verifier进行sha256哈希+base64URL编码后,所得结果与预期的完全不一致;在进行初步对比排查后发现是在base64URL这一步骤出现的差异。
  2. 并且在使用各种线上工具对已经sha256哈希后的字符串进行base64URL编码,也与预期结果完全不一致。


Flutter调用JSON序列化出现type 'String' is not a subtype of type 'MapString, dynamic'

问题情况

本来按照书上的思路都封装好了Dio,半自动生成了Json Model,结果在实际应用上出现了以下异常:

Unhandled Exception: type 'String' is not a subtype of type 'Map<String, dynamic>'


Flutter生成JSON序列化模板报错

问题详情:

在执行flutter packages pub run build_runner build自动生成JSON序列化模板的时候出现了以下报错:

Generator cannot target libraries that have not been migrated to null-safety.
package:flutter_test2/model/recommender.dart:6:7
  ╷
6 │ class Recommender {
  │       ^^^^^^^^^^^
  ╵
[INFO] Running build completed, took 1.0s
[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 41ms
[SEVERE] Failed after 1.1s
pub finished with exit code 1