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

Windows 11 + Ubuntu 20.04 双系统安装教程

一、风险提前规避(核心前提) 潜在风险规避措施误格式化 Windows 分区提前备份桌面、文档、项目代码等重要文件到移动硬盘分区 / 安装时断电操作全程保持笔记本插电,或电量≥80%安全启动阻止安装提前在 BIOS 中关闭 Secure Boot 二、前期准备 1. 物料与软件准备 物品 / 软件要求 / 说明空白 U 盘≥8G,数据会清空,需提前备份Ubuntu 镜像推荐 20.04 LTS(适配 ROS Noetic),从 Ubuntu 官网下载启动盘工具Rufus(免费无广告),从 Rufus 官网下载 2. 关闭 Windows 安全启动(必做) 1. Win+I

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 theme_tailor 像裁剪西装一样精准定制鸿蒙多端统一的主题管理系统(UI 工程化利器)

Flutter for OpenHarmony: Flutter 三方库 theme_tailor 像裁剪西装一样精准定制鸿蒙多端统一的主题管理系统(UI 工程化利器)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 的精细化 UI 开发时,开发者面临的最大痛点之一就是 ThemeData 的膨胀与维护。 1. 鸿蒙官方的 ThemeData 属性有限,如果你想定义一个 brandColorLight 或 brandColorDark,该塞到哪? 2. 手写 ThemeExtension 的样板代码(如 copyWith 和 lerp)极其枯燥且容易出错。 3. 当需要在深色模式(Dark Mode)和浅色模式间丝滑切换时,逻辑往往支离破碎。 theme_tailor 正是为你量身打造的。它基于代码生成技术,让你只需定义一个简单的类,就能自动生成整套专业的、类型安全的主题扩展。 一、主题代码生成模型 theme_tailor 将设计稿配置自动转化为

By Ne0inhk

Linux:初始网络(下)

或许你有一个疑问,“发请求、收响应”,却不清楚数据在网线里到底是怎么从一台主机走到另一台主机的。这篇博客在上一篇博客基础上,将最基础的局域网通信原理出发,拆解数据封装与解包的核心逻辑,再延伸到跨网段的网络传输,帮你建立起网络传输的完整宏观认知,所以大家要认真阅读啦~~ 一、同局域网通信:以太网内的主机如何直接对话 局域网是我们最常接触的网络场景,比如家里的路由器连接的电脑、手机,公司内网的办公设备,都属于同一个局域网。我们先从最核心的问题切入,理解局域网通信的底层逻辑 1. 核心问题:同一局域网的两台主机,能直接通信吗? 答案是:完全可以!局域网内的主机通信,本质是基于以太网协议、通过 MAC 地址完成的二层直连通信,原理就像我们在同一个教室里上课:老师喊出同学的名字,全班同学都能听到这个声音,但只有名字对应的同学会做出回应,其他同学会自动忽略这个信息 2. 局域网通信的唯一身份标识:MAC 地址 在以太网的局域网里,每一台主机的唯一性,靠的就是 MAC 地址来保证。 * 核心定义:MAC 地址用来识别数据链路层中相连的节点,是网卡的 “物理身份证”

By Ne0inhk
Ubuntu下载以及安装详解以及应用安装

Ubuntu下载以及安装详解以及应用安装

Ubuntu 下载与安装详解 整个过程主要分为四个步骤: 1. 准备工作:下载系统和制作启动盘。 2. BIOS/UEFI 设置:调整电脑启动顺序。 3. 安装过程:分区、设置用户等核心步骤。 4. 安装后设置:驱动和软件更新。 第一步:准备工作 1. 下载 Ubuntu 系统镜像 (.iso 文件) * 访问官网:打开 Ubuntu 官方网站 https://ubuntu.com/download/desktop * 选择版本: * LTS (长期支持版):推荐绝大多数用户使用。例如 22.04 LTS 或 24.04 LTS。LTS 版提供 5

By Ne0inhk