三方登录 - 华为登录

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

相关文章

精准寻车+鸿蒙有礼特别版均已上线! 华为鸿蒙HarmonyOS 6负一屏新升级

《精准寻车+鸿蒙有礼特别版均已上线!华为鸿蒙HarmonyOS6负一屏新升级》不少朋友升级华为鸿蒙HarmonyOS6后,发现华为负一屏此次也新增了精准寻车功能,还为过往鸿蒙5.1及以上用户再度... 最近科技圈热议话题当属华为全新发布的Mate 80系列,这次不仅有全金属机身,第二代红枫影像和全新麒麟新品

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

故障定位快人一步! 华为交换机排障命令汇总

《故障定位快人一步!华为交换机排障命令汇总》在使用华为交换机进行故障排查时,首先需要了解交换机的当前状态,通过执行基础命令,可以迅速获取到交换机的系统信息、接口状态以及配置情况等关键数据,为后续的故... 目录基础系统诊断接口与链路诊断L2切换排障L3路由与转发高级调试与日志性能、安全与扩展IT人无数次实战

在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)

《在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)》DataGrip是JetBrains公司出品的一款现代化数据库管理工具,支持多种数据库系统,包括MySQL,:本文主要介绍在D... 目录前言一、登录 mysql 服务器1.1 打开 DataGrip 并添加数据源1.2 配置 MySQL

Springboot中JWT登录校验及其拦截器实现方法

《Springboot中JWT登录校验及其拦截器实现方法》:本文主要介绍Springboot中JWT登录校验及其拦截器实现方法的相关资料,包括引入Maven坐标、获取Token、JWT拦截器的实现... 目录前言一、JWT是什么?二、实现步骤1.引入Maven坐标2.获取Token3.JWT拦截器的实现4.

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Spring Security重写AuthenticationManager实现账号密码登录或者手机号码登录

《SpringSecurity重写AuthenticationManager实现账号密码登录或者手机号码登录》本文主要介绍了SpringSecurity重写AuthenticationManage... 目录一、创建自定义认证提供者CustomAuthenticationProvider二、创建认证业务Us

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R