如何在Flutter(Android和iOS)中集成瑞典BankID认证服务?
Flutter集成瑞典BankID认证实操指南
前置准备
- 确认接入资质:个人开发者可使用官方Sandbox测试环境,企业需向BankID申请正式API权限,获取对应
.p12格式证书与密钥。 - 测试资源:Sandbox提供测试用身份信息,比如测试SSN
190001011234、PIN码123456,需搭配BankID测试版APP使用。
核心交互流程
BankID认证为异步三方交互,必须通过后端中转(禁止前端直接调用BankID API,避免证书泄露):
- Flutter客户端请求后端发起认证
- 后端调用BankID
/auth接口创建订单,返回orderRef - Flutter客户端轮询后端状态接口,后端同步调用BankID
/collect接口查询状态 - 用户在BankID手机APP完成确认后,后端收到
complete状态,通知Flutter客户端 - 客户端处理认证结果(成功/失败/取消)
Flutter端核心代码实现
1. 发起认证请求
import 'dart:convert'; import 'package:http/http.dart' as http; Future<void> startBankIdAuth(String personalNumber) async { try { final response = await http.post( Uri.parse('https://your-backend-domain.com/bankid/initiate'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'personalNumber': personalNumber}), ); if (response.statusCode == 200) { final authData = jsonDecode(response.body); await _checkAuthStatus(authData['orderRef']); } else { throw Exception('发起认证失败,请稍后重试'); } } catch (e) { // 可弹出Toast或Alert提示用户 print('认证错误: $e'); } }
2. 轮询认证状态
Future<void> _checkAuthStatus(String orderRef) async { const pollInterval = Duration(seconds: 2); bool authFinished = false; while (!authFinished) { await Future.delayed(pollInterval); final response = await http.get( Uri.parse('https://your-backend-domain.com/bankid/status/$orderRef'), ); final statusData = jsonDecode(response.body); switch (statusData['status']) { case 'complete': authFinished = true; // 认证成功,执行后续逻辑(如跳转主页、获取用户信息) break; case 'pending': // 提示用户"请在手机BankID APP中确认认证" break; case 'failed': authFinished = true; // 显示失败原因,比如statusData['errorMessage'] break; } } }
后端关键注意事项
- 证书配置:调用BankID API时需使用双向TLS认证,后端需加载BankID提供的客户端证书(
.p12)并处理证书密码。 - API调用逻辑:
- 发起认证:调用BankID
/auth接口,可传入用户个人号码(不传则用户需手动选择账号) - 查询状态:循环调用
/collect接口,直到返回complete/failed状态,轮询频率建议2-3秒一次
- 发起认证:调用BankID
- 安全处理:后端需验证BankID返回的签名,确保响应未被篡改。
测试要点
- 必须使用BankID测试版APP,登录测试账号后才能接收认证请求
- Sandbox环境API地址为
https://appapi.test.bankid.com/rp/v5.1,正式环境为https://appapi.bankid.com/rp/v5.1
内容的提问来源于stack exchange,提问作者Arifur Rashid
相关产品推荐
相关产品推荐

