三方登录 - 华为登录

2024-09-08 02:52
文章标签 登录 华为 三方

本文主要是介绍三方登录 - 华为登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.1. 开发准备

当应用需要使用以下开放能力的一种或多种时,为正常调试运行应用,需要预先添加公钥指纹

  • Account Kit(华为帐号服务)
  • Call Kit(通话服务)
  • Game Service Kit(游戏服务)
  • Health Service Kit(运动健康服务)
  • IAP Kit(应用内支付服务)
  • Live View Kit(实况窗服务,当需要使用Push Kit时必须执行此步骤)
  • Map Kit(地图服务)
  • Payment Kit(华为支付服务)
  • Push Kit(推送服务)
  • Scan Kit(统一扫码服务)

1.1.1. 配置应用签名证书

1.1.2. 在DevEco Studio工具侧生成密钥(.p12)和证书请求文件(.csr)

在主菜单栏单击Build(构建)-> Generate Key and CSR(生成私钥和证书请求文件)

选择要生成的文件目标位置并设置密码,填 Alias别名 以及First and last name之后,点击Next按钮

出现下面的弹框之后,填写CSR file文件目标位置之后,点击Finish按钮完成CSR文件创建

检查本地目录中,是否成功生成 .csr.p12 文件

1.1.3. 申请调试证书

在AGC平台点击 用户与访问, 左侧点击证书管理,再点击还右侧新增证书

在弹框中填写证书名称、选择证书类型为调试证书,选取我们在第一步生成的.csr文件,最后点击提交

会看到证书管理列表中多了一条记录

最后我们点击下载按钮,把调试证书下载的本地,后来配置要用

1.1.4. 申请调试profile

进入AGC平台,点击我的项目进入到项目页,点击左侧HAP Provision Profile,点击右侧的添加按钮,弹出框内选择上一步生成的meikou_pre调试证书

点击下载按钮,把profile文件下载到本地

1.1.5. DevEco Studio工具中配置签名信息

点击文件->项目结构

点击“Signing Configs”页签。去除勾选的“Automatically generate signature”(如果是API 8和9工程,需同时勾选“Support HarmonyOS”),填写相关信息后,点击“OK”。

  • Store File:密钥库文件,选择生成密钥和证书请求文件时生成的.p12文件
  • Store Password:密钥库密码,需要与生成密钥和证书请求文件时设置的密钥库密码保持一致
  • Key alias:密钥的别名信息,需要与生成密钥和证书请求文件时设置的别名保持一致
  • Key password:密钥的密码,需要与生成密钥和证书请求文件时设置的密码保持一致
  • Sign alg:固定设置为“SHA256withECDSA”
  • Profile file:选择申请调试Profile时下载的.p7b文件
  • Certpath file:选择申请调试证书时下载的.cer文件

1.1.6. 配置公钥指纹

  • 登录AppGallery Connect,点击“我的项目”。
  • 在项目列表中找到您的项目,在项目中点击您的应用/元服务。
  • 在“项目设置 > 常规”页面的“应用”区域,点击“SHA256证书/公钥指纹”后的“添加公钥指纹(HarmonyOS API 9及以上)”

选择咱们添加的调试证书

  • 在“选择SHA256公钥指纹”窗口,选择应用使用的证书对应的指纹,点击“确认”

1.2. 配置权限

1.2.1. 配置Client ID

把ClientId后面的数字复制一下,放到项目的module.json5文件中

"module": {"name": "xxx","type": "entry","description": "xxx","mainElement": "xxx","deviceTypes": [],"pages": "xxx","abilities": [],"metadata": [ // 配置信息如下{"name": "client_id","value": "xxx"}]
}

1.2.2. scope权限申请

登录华为开发者联盟,选择管理中心->API服务->授权管理 ,选择目标应用的应用名称,服务选择“华为帐号服务”,选择“敏感权限”,再选择“获取您的手机号”或“获取并验证您的手机号”,点击“申请”

HUAWEI Developer

注:只要.p12 + .cer + .p7b三个文件保持不变,包名保持一致,任何新建项目都可以复用三个文件进行正常签名直接调试各种服务,无需重新走一遍流程

1.3. 实现华为授权登录

1.3.1. 实现流程图

  1. 配置证书及权限
  2. 调用华为登录的 api 拉起登录界面
  3. 获取登录成功之后的 code(码)
  4. 提交给应用的后端接口
  5. 后端会将 code 提交给华为服务器验真
  6. 成功返回用户信息
  7. 本地拿到用户信息保存即可

1.3.2. 获取华为登录 code

1.准备登录模块

为了简化调用这里将华为登录的核心逻辑进行封装,参考的

commons/basic/src/main/ets/utils/HuaweiAuthPlugin.ets

import { authentication } from '@kit.AccountKit'PersistentStorage.persistProp<string>('openId', '')class HuaweiAuthPlugin {async requestAuth() {// 1. 创建一个Account Kit授权请求对象,可通过返回值设置请求参数。const huaweiIdProvider = new authentication.HuaweiIDProvider()const authCreateRequest = huaweiIdProvider.createAuthorizationWithHuaweiIDRequest()// 2. 添加请求参数authCreateRequest.scopes = ['phone', 'openid']authCreateRequest.permissions = ['serviceauthcode']authCreateRequest.forceAuthorization = true// 3. 执行授权请求,获取认证码const authController = new authentication.AuthenticationController(getContext())const authResponse: authentication.AuthorizationWithHuaweiIDResponse =await authController.executeRequest(authCreateRequest)const serviceauthcode = authResponse.data?.authorizationCodeAppStorage.setOrCreate<string>('openId', authResponse.data?.openID)return serviceauthcode}// getHuaweiIDState  api12 支持async cancelAuth() {try {// 1. 创建一个Account Kit授权请求对象,可通过返回值设置请求参数。const huaweiIdProvider = new authentication.HuaweiIDProvider()const authCancelRequest = huaweiIdProvider.createCancelAuthorizationRequest()// 2. 取消授权const authController = new authentication.AuthenticationController(getContext())await authController.executeRequest(authCancelRequest)return true} catch (e) {console.log('mk-logger', JSON.stringify(e))return false}}
}export const huaweiAuthPlugin = new HuaweiAuthPlugin()

别忘了导出

2. 准备登录组件

features/my/src/main/ets/components/HuaweiLoginCom.ets

import { huaweiAuthPlugin } from '@mk/basic'
import { MkDialogLoading } from '@mk/basic'@Component
export struct HuaweiLoginCom {dialog: CustomDialogController = new CustomDialogController({builder: MkDialogLoading({ message: '华为登录中' }),customStyle: true,alignment: DialogAlignment.Center})build() {Image($r('app.media.ic_user_huawei')).width(40).onClick(async () => {// 等待完善})}
}

3.整到登录页

features/my/src/main/ets/views/LoginView.ets

import { HuaweiLoginCom } from '../components/HuaweiLoginCom'// 其他略
Row() {// 后续放置华为登录HuaweiLoginCom()
}

4.获取Code

Image($r('app.media.ic_user_huawei')).width(40).onClick(async () => {this.dialog.open()const res = await huaweiAuthPlugin.requestAuth()AlertDialog.show({message: res})this.dialog.close()})

1.3.3. 实现华为登录

features/my/src/main/apis/index.ets

// 华为登录
interface HuaweiLoginParams {code: stringclientId: stringclientSecret: string
}// 演示使用,实际秘钥应该由后端通过接口返回
// 在AGC 平台获取 需要和应用的一致
// 改成你的!!!!!!!!!!
export const clientId = '111009537'
export const clientSecret = '30ac635b8516278c75582b4bdf1a6cf06827d782d5ddc1c3f97a8e31cb1e761e'export const huaweiLoginAPI = (code: string) => {const data: HuaweiLoginParams = {clientId,clientSecret,code}return RequestAxios.post<MkUser, HuaweiLoginParams>('/login/huawei', data)
}

features/my/src/main/ets/components/HuaweiLoginCom.ets

 build() {Image($r('app.media.ic_user_huawei')).width(40).onClick(async () => {try {this.dialog.open()const res = await huaweiAuthPlugin.requestAuth()const loginRes = await huaweiLoginAPI(res as string)auth.saveUser(loginRes.data.result)router.back()} catch (e) {AlertDialog.show({ message: JSON.stringify(e, null, 2) })} finally {this.dialog.close()}})}

1.3.4. 调整登出逻辑

features/my/src/main/ets/views/SettingView.ets

 MkCellGroup() {MkCell({ label: '退出登录', hasBorder: false }).onClick(() => {AlertDialog.show({title: '温馨提示',message: '您确定退出登录吗',alignment: DialogAlignment.Bottom,primaryButton: {value: '取消',fontColor: $r('[basic].color.gray'),action: () => {}},secondaryButton: {value: '确定',fontColor: $r('[basic].color.red'),action: () => {auth.removeUser()AppStorage.setOrCreate(CartCountKey, 0)huaweiAuthPlugin.cancelAuth()router.back()}}})})}

这篇关于三方登录 - 华为登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146914

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e

华为 HCIP-Datacom H12-821 题库 (13)

有需要题库的可以看主页置顶 1.可以携带外部路由的 tag 标签信息的是以下哪一类 LSA? A、4 类 LSA B、5 类 LSA  C、3 类 LSA  D、2 类 LSA 答案:B 解析: 暂无解析 2..两台路由器直连,并设定网络类型为 p2p 建立OSPF 邻居。那么两台路由器传输 OSPF 报文的目的 IP 地址是以下哪一项? A、使用组播地址 224.0.0.6 B

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms

实现的动态规划问题华为笔试题C++实现

秋招刷力扣题,我觉得我对动态规划不是熟练,在此处做总结 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。我觉得最大的问题就是对问题的分解,分解后的问题与分解前的问题具有相同的决策机制,将决策机制进行抽象,最终可以得到对应的解; 动态规划中开始介绍的爬楼梯等问题,答

SpringBoot登录退出|苍穹外卖登录退出分析

文章目录 概要整体流程注意事项一、拦截路径二、token三、注册防止用户重复提交 苍穹外卖登录退出分析注意解决JWT退出后依然有效的问题 概要 结合Spring Boot和Vue3实现安全的用户登录和退出功能,并使用拦截器、JWT和Redis缓存来提高系统的安全性和性能。 整体流程 注意事项 一、拦截路径 像登录页面的路径就不要拦截了,否则都不能登录了 例如: