You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter(Android和iOS)中集成瑞典BankID认证服务?

Flutter集成瑞典BankID认证实操指南

前置准备

  • 确认接入资质:个人开发者可使用官方Sandbox测试环境,企业需向BankID申请正式API权限,获取对应.p12格式证书与密钥。
  • 测试资源:Sandbox提供测试用身份信息,比如测试SSN 190001011234、PIN码 123456,需搭配BankID测试版APP使用。

核心交互流程

BankID认证为异步三方交互,必须通过后端中转(禁止前端直接调用BankID API,避免证书泄露):

  1. Flutter客户端请求后端发起认证
  2. 后端调用BankID /auth接口创建订单,返回orderRef
  3. Flutter客户端轮询后端状态接口,后端同步调用BankID /collect接口查询状态
  4. 用户在BankID手机APP完成确认后,后端收到complete状态,通知Flutter客户端
  5. 客户端处理认证结果(成功/失败/取消)

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测试版APP,登录测试账号后才能接收认证请求
  • Sandbox环境API地址为https://appapi.test.bankid.com/rp/v5.1,正式环境为https://appapi.bankid.com/rp/v5.1

内容的提问来源于stack exchange,提问作者Arifur Rashid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:55:29