Flutter for OpenHarmony: Flutter 三方库 openid_client 深度打通鸿蒙应用的单点登录 (SSO)(基于 OpenID Connect 标准)

Flutter for OpenHarmony: Flutter 三方库 openid_client 深度打通鸿蒙应用的单点登录 (SSO)(基于 OpenID Connect 标准)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

在这里插入图片描述

前言

在现代企业级 OpenHarmony 应用中,为了安全和便捷,往往会使用 OpenID Connect (OIDC) 协议进行统一身份认证。无论是集成 Google 登录、GitHub 登录,还是对接企业内部的 Keycloak、Okta 等身份提供商(IdP),我们都需要一个健壮的库来处理繁杂的 OAuth2 握手流程。

openid_client 是一个功能极其全面的 Dart 实现。它能够自动发现服务器端点(Discovery)、处理 PKCE 流程并安全地交换令牌,是构建高安全级别鸿蒙应用的首选。

一、核心认证流程

OIDC 认证流程通常是通过浏览器重定向完成的,openid_client 充当了流程的指挥官。

身份服务器 (IdP)openid_client鸿蒙 App身份服务器 (IdP)openid_client鸿蒙 App用户在浏览器登录并授权发起授权请求获取 Discovery 文档 (well-known)返回 endpoints打开浏览器授权页重定向回 App (带 Code)传入 Code交换 Access & ID Token返回 JWT 令牌完成登录

二、核心 API 实战

2.1 自动发现服务器端点

import'package:openid_client/openid_client.dart';voidinitClient()async{// 💡 只需要输入 OIDC 基地址,自动拉取 .well-known/openid-configurationvar uri =Uri.parse('https://keycloak.harmony.com/realms/ohos');var issuer =awaitIssuer.discover(uri);// 初始化客户端var client =Client(issuer,"my-ohos-app-client-id");print('✅ 授权端点: ${issuer.metadata.authorizationEndpoint}');}
在这里插入图片描述

2.2 启动身份验证

// 💡 定义需要的权限范围 (Scopes)var authenticator =Authenticator( client, scopes:['openid','profile','email'], port:8888,// 桌面端/开发模式回调端口);var credential =await authenticator.authorize();
在这里插入图片描述

2.3 获取用户信息

var userInfo =await credential.getUserInfo();print('登录用户姓名: ${userInfo.name}');
在这里插入图片描述

三、OpenHarmony 平台适配

3.1 跨端重定向适配

💡 技巧:在鸿蒙真机上,OAuth2 的回调通常是通过系统 Custom Scheme (如 myohosapp://callback) 实现的。你需要确保在 module.json5 中声明了该 Scheme,并将截获的 URL 传入 credential 对象的处理函数中。

3.2 证书与 HTTPS

生产环境下的 OIDC 必须强制 HTTPS。鸿蒙系统的证书校验非常严格,请确保你的身份服务器配置了合法的、受信任的证书,否则 Issuer.discover 会抛出证书异常。

四、完整实战示例:鸿蒙企业级单点登录模块

本示例展示如何优雅地封装一个登录服务。

import'package:openid_client/openid_client_io.dart';import'package:url_launcher/url_launcher.dart';classOhosLoginService{finalString _clientId ="ohos_business_app";finalString _issuerUrl ="https://id.harmony.com";Future<void>login()async{print('🚀 正在启动鸿蒙企业 SSO 认证...');// 1. 发现服务器final issuer =awaitIssuer.discover(Uri.parse(_issuerUrl));final client =Client(issuer, _clientId);// 2. 构造授权逻辑 (适配鸿蒙外部浏览器启动)final authenticator =Authenticator( client, scopes:['openid','offline_access'], urlLancher:(url)async{if(awaitcanLaunchUrl(Uri.parse(url))){awaitlaunchUrl(Uri.parse(url), mode:LaunchMode.externalApplication);}},);// 3. 等待认证结果final credential =await authenticator.authorize();// 4. 安全地交换 Token (或者处理凭证)final tokenResponse =await credential.getTokenResponse();print('✅ 登录成功!AccessToken 发放完毕');print('Token 内容: ${tokenResponse.accessToken}');}}
在这里插入图片描述

五、总结

openid_client 软件包是 OpenHarmony 开发者在构建标准化身份架构时的数字盾牌。它遵循 RFC 标准,极大地简化了 OIDC 中极其复杂的令牌刷新机制和安全性验证(如 nonce 检查、签名验证)。在构建对安全性有极高要求的鸿蒙大型应用时,采用此类标准化的第三方库,能有效降低认证系统的漏洞风险。

Read more

Java 开发者如何搞定百度地图 SN 权限签名实践-以搜索2.0接口为例

Java 开发者如何搞定百度地图 SN 权限签名实践-以搜索2.0接口为例

目录 前言 一、SN签名简介 1、SN签名是什么 2、如何开启SN签名 3、SN签名算法 二、在Java中的应用 1、请求Map参数化 2、SN签名生成 3、搜索接口调用 三、APP SN校验失败可能的原因 1、字符编码问题 2、参数顺序 3、timestamp的设置 四、总结 前言         在当今数字化时代,地图服务已成为众多应用程序不可或缺的功能模块。无论是出行导航、位置分享,还是基于地理位置的业务拓展,地图服务都发挥着关键作用。百度地图作为地图服务提供商,为开发者提供了丰富多样的 API 接口,助力各类应用实现强大的地图功能。然而,对于 Java 开发者而言,在使用百度地图 API 时,SN 权限签名这一环节常常成为开发过程中的一个技术难点,

By Ne0inhk
Java 多态

Java 多态

文章目录 * 多态 * 向上转型和向下转型 * 向上转型和重写 * 重写和重载的区别 * 动态绑定和静态绑定 * 用代码来解释什么是多态 * 向下转型 * 多态的优点 * 总结 多态 1. 什么是多态?为什么要使用多态? 简单来说是多种形态,具体来说是去完成某个事情,当不同对象去完成同一件事表现出来的不同结果/状态 打个比方就是同一个人对待不同人表现出来的形态是不同的 2. 多态实现的三个条件: 向上转型和向下转型 向上转型和重写 1. 将子类对象给父类类型的引用 父类类型 对象名 = new 子类类型() 直接赋值的 classAnimal{publicString name;publicint age;publicAnimal(String name,int age){this.name = name;this.age = age;}// 父类中的this是当前对象的引用publicvoideat(){System.out.println(

By Ne0inhk
构建高效AI工作流:Java生态的LangGraph4j框架详解

构建高效AI工作流:Java生态的LangGraph4j框架详解

AI工作流的概念及其在Java生态中的实现框架LangGraph4j 什么是工作流? AI工作流是将多个AI任务、数据处理步骤和业务逻辑按照特定顺序组织起来的自动化流程。有了工作流就不需要让AI来判断是否该执行某个规定的任务。 在Java生态中,AI工作流类似于传统的工作流引擎,但专门为AI任务优化。是将AI能力工程化、工业化的重要手段。通过工作流编排,可以实现: 1. 复杂AI任务的自动化执行 2. 多模型协同工作 3. 与现有业务系统的无缝集成 4. 完整的监控和治理 为什么需要工作流? 在AI应用开发中,我们经常需要串联多个步骤,例如:获取用户输入、调用多个工具、条件判断、循环重试等。传统的方式是将这些步骤写在业务代码中,导致代码冗长、难以维护和扩展。工作流引擎通过将流程可视化、模块化,使得复杂的业务流程变得清晰、易于编排和调试。 传统模式:业务流程分散在各个Service方法中,逻辑耦合 工作流模式:将业务流程抽象为有向图,节点代表操作单元,边控制流程走向 前言 目前比较流行的几种AI工作流平台,像Dify、Coze、阿里云百炼,它们只要通过拖

By Ne0inhk