华为帐号服务学习笔记(四):Authorization Code模式服务端开发
笔者在《华为帐号服务学习笔记(二):OAuth2.0协议详解》中已经给大家介绍了Authorization Code模式是需要有后台服务器才能使用的,并且在《华为帐号服务学习笔记(三):10分钟完成Authorization Code模式客户端Demo开发》文章中已经给大家介绍了一种高效完成客户端Demo开发的方式,本篇文章将介绍code模式服务端需要的开发步骤及注意事项,在介绍之前,笔者再带大家先回顾下Code模式整体的交互流程是怎样的,华为帐号服务在使用code模式时流程有哪些差异。
华为帐号服务Authorization Code模式业务流程
步骤详细介绍:
- 用户选择帐号登录方式登录应用客户端。
- 应用客户端向帐号SDK发送请求,获取Authorization Code。
- 帐号SDK向HMS Core(APK)发送请求,获取Authorization Code。
- HMS Core(APK)向帐号服务器发送请求,获取Authorization Code。
- HMS Core(APK)展示帐号服务器的用户登录授权界面,界面上会根据登录请求中携带的授权域(scopes)信息, 显式告知用户需要授权的内容。
- 用户允许授权。
- 帐号服务器返回Authorization Code信息给HMS Core(APK)。
- HMS Core(APK)返回Authorization Code信息给帐号SDK。
- 帐号SDK返回Authorization Code信息给应用客户端。
- 应用客户端将获取到的Authorization Code信息发给应用服务器。
- 应用服务器向帐号服务器发送请求,获取Access Token、Refresh Token、ID Token信息。
- 帐号服务器返回Access Token、Refresh Token、ID Token信息。
从流程中可以看到,里面涉及的华为帐号SDK和HMS Core APK,当前HMS Core apk在所有华为新发布的手机中已经预装了,如果没有装的话,在登录华为帐号的时候也会提示用户安装,这是在华为手机等移动端上的流程,后续在非华为手机、及其他移动端设备上华为也会有相对应的出端方案,这部分让我们拭目以待。
Authorization Code模式服务端开发步骤与接口示例
1、接收来自客户端发送的code
该部分代码涉及到客户端和服务端的交互方式,需要根据自身设计开发,华为没有提供示例代码。
2、用code换Access Token
应用服务器调用华为帐号服务器对应接口将code换成Access Token、Refresh Token。同时将Access Token、Refresh Token保存在应用服务器。
注:code有效期只有5分钟,且用一次就会失效,失效后需要通知客户端重新获取用户授权。
请求参数:
请求示例:
POST /oauth2/v3/token HTTP/1.1
Host: oauth-login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=CF3L7XyCVZi52XMdsUzD7Z6ap0/N2qExcNe0AMqTselTtNd1B4DUwTsQ/23FPZasC8yI29v+N2s2jMT/T2MXiuc+178I/sYuWVoTyqwBaDqVW82KCMqaxbeWBguH4hEENxmDSUIE61Qg5R1F074PiS+qJYnbLI2IBqatS37px8pn5qnuq5oX+UX8XN3/w8HLt4GpakW5Dk1v7hGs&
client_id={app_id}&
client_secret={app_secret}&
redirect_uri=https://www.example.com/redirect_uri
响应参数:
响应示例:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
“access_token”: “CFyJ21sNODl16eV9y2vu3CwQk9DBr32BkOcxxgAd7MZUR5th1giyTk5/kA+QDAyxou+/5U2zzBRcf3qgLkkFdtbbC+mM3zFV7xj7CCEMHc5Tw92al0Y=”,
“refresh_token”: “CF13G0sRaGybtYt7SIyeUILNORtTFwMgz4ao5C7j7vtgLPt6ogmXKjdI8RS/YlyS71z4DyP6kEMnOrRlmNK0KhdOUNWd+qVLLRsEEHkqRIKpuAkPvL8=”,
“expires_in”: 3600,
“id_token”: “eyJraWQiOiI3YTNlYjRkNTJmMDdhODM0NDU4MmRhOGQ3MWE1MGQ5MDlmNWM0YmRiZTFkNDQ3MjQ2MDNhZTA2NGM0ZTlkZGYyIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjoiM0hPdFZYOEdMcG1GSDBWRVlSc1BjdyIsImF1ZCI6IjEwMDczNTE2NyIsInN1YiI6Ik1ERTlYaWFoc3MwaWFFNXU2c09PaEY5Mlhvell0Rkt4bUdtbWlhNGtTaEJ3dklLR2ciLCJhenAiOiIxMDA3MzUxNjciLCJpc3MiOiJodHRwczovL2FjY291bnRzLmh1YXdlaS5jb20”,
“scope”: “openid profile email”,
“token_type”: “Bearer”
}
3、解析Access Token
获取到Access Token,要对其进行解析鉴权,获取Access Token中包含的union_id、open_id、expire_in、scope等信息。
请求示例:
POST /rest.php?nsp_fmt=JSON&nsp_svc=huawei.oauth2.user.getTokenInfo HTTP/1.1
Host: oauth-api.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
open_id=OPENID&
access_token=CFwaKaGpgXEj9LlsDKVARTUL7DFkvbAE2a22HYpRx%2F520JO5UvfWqSc6X7XUwf4Pzo5%2FxC8mByagdMPG%2FHeHDBldhW3tYizcw3xXSVwJPWK82C8zPM%3D
其中open_id为固定值“OPENID”。
响应示例:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
“union_id”: “MDHSI1UnQ9wzGzibtoqicNNnUmJbwhicPzHxxiaVHvMtmNd3xw”,
“scope”: “https://www.huawei.com/auth/account”,
“open_id”: “MDFAMzAwMDE3NTAxQGI4ODgzNWRmYjE4ZTI2NGFiaZDE2YjI5ODMwMDM3MDA0QDIxYWY3NzVkZmM1ODk1MWY4NzI4YzFiaNGJkMjE2Y2QyZTUxNzg3NzUzMDcyZTM4ZjkyZTQxYw”,
“expire_in”: 1123,
“client_id”: “300017501”
}
响应参数说明:
4、判断Access Token、Refresh Token是否过期
A、 解析AT后,可获取该AT的有效期时间(默认60分钟),开发者可以根据这个时间进行倒计时判断当前AT是否即将过期,做好提前保活,这部分代码需要我们自行开发;
B、 另一种方式是看用AT去获取用户信息的时候是否返回AT过期错误码(NSP_STATUS=6)来判断;
C、 RT是否过期(默认有效期180天)可以通过用RT换取AT时是否返回RT过期错误码(主错误码:1203,子错误码:11205)来判断。
5、Access Token即将过期或已过期,可用Refresh Token去华为帐号服务器刷新Access Token
当Access Token未过期,用Refresh Token去刷新不会改变Access Token,但超时时间会刷新。
当Access Token已过期,用Refresh Token去刷新,会获得一个新的Access Token。
RT刷新AT的接口与用Code换取AT的接口类似,只需要将grant_type 换成”refresh_token” 、code换成Refresh Token,同时去掉redirect_uri参数即可。
请求示例:
POST /oauth2/v3/token HTTP/1.1
Host: oauth-login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&
client_id=12345&
client_secret=bKaZ0VE3EYrXaXCdCe3d2k9few&
refresh_token=CF2Mm03n0aos9iZZ8nIhfyDtoXy74CXeBi50gVVhMpB0IUzlv9ZwizEvTBhVoF820ZPim0JwNR9j2p1qgEQWnIVYZRlp4T6ezMgekUnsHBkvNev5rd2MdfQMLP
响应示例:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
“access_token”: “CFyJ4J/l6wuwcFqYOJG4maq2ca8RAV+g0i+mel6qCV5lvqH0PYtW0+BNwfHWg0AqMnW6ZdBvUgs7ijkxMFh1xVP/B+vQXz3PWsivkKCuL78XtbLt7vs=”,
“id_token”: “eyJhbGciOiJSUzI1NiIsImtpZCI6IjExOGRmMjU0YjgzNzE4OWQxYmMyYmU5NjUwYTgyMTEyYzAwZGY1YTQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI3ODI0NTY2Njc4OTgtc2M0MzE3Y2l0NGEwMjB0NzdrbGdsbWo1ZjA4YWtnMWIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI3ODI0NTY2Njc4OTgtN2NkNGJpYWRkaGVwNGc4cnZic2VlOGtwcDA5Zm1hNzIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMDE3MTIxMzkwMzgwNDE2MDc0MTQiLCJlbWFpbCI6Inh1ZXpoZW5odWF0anVAc2l”,
“expires_in”: 3600,
“scope”: “openid profile email”,
“token_type”: “Bearer”
}
6、Refresh Token过期后,应用服务器需通知客户端重新申请用户授权,重新获取code,刷新AT和RT
该部分代码需要我们开发者根据自身设计去开发,华为没有提供示例代码。
注:这个步骤很容易遗漏
7、使用Access Token去华为帐号服务器获取用户信息
应用已经获取到Access Token并已申请帐号开放信息对应权限后,应用需要获取帐号用户名称、头像、手机号码、年龄等信息。
请求示例:
POST /rest.php?nsp_svc=GOpen.User.getInfo HTTP/1.1
Host: account.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
access_token=CV46i%2BFdM3LEja3z7%2BjOGu27mNBsKwBznSoe4MMfKmNw4aGNLisoCKYgbSOJIVhWLOIIVr0nMwVXFu9AvFGKoJmGk%2FUZdMDytv2bsamauePs3FG6ZkU%3D&
getNickName=0
响应示例:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
“displayName”:“182******74”,
“openID”:“MDFAMTAxMDA1MTg1QGFlMzM0OWIyOGY0MzNiaNjI1MDRiaNTI5ODAxYTA3MDhkQDU1MDA4ZTZmNTA2ZTE4ZTg0Yzc2YTlmNGVmN2E1ZjY1OTg4NWRiaN2QxMzQyMDUzNGMzNTU0YWQ3”,
“headPictureURL”:“https://upfile-drcn.platform.hicloud.com/FileServer/image/b.0150086000130905592.20180407082531.08157939582468778294625163020035.1000.9C3EE92B95EFEF4CAC263604A15953F32C7BC9E8A47D52B774511F75EF34C0D4.jpg”
}
响应参数说明:
注:当应用有获取头像、手机号、服务地国家、注册地、生日、年龄段、邮箱权限后才返回对应信息。
服务端相关示例代码可参考https://github.com/HMS-Core/huawei-account-demo/tree/master/Account-Server-Java-Demo
后续笔者会不断输出相关领域的优质内容,希望大家持续关注本帐号!
华为帐号服务学习笔记(四):Authorization Code模式服务端开发相关推荐
- Java微服务学习笔记(一):微服务架构的概念理解
Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...
- 【接入指南】华为帐号服务Authorization Code模式介绍与接入步骤详解
华为帐号服务提供两种登录授权模式,第一种是Authorization Code模式,第二种是ID-Token模式,这两种模式在使用场景上存在差异.本文将详细介绍Authorization Code模式 ...
- 快速上手!华为帐号服务Authorization Code模式接入详解
华为帐号服务提供两种登录授权模式,第一种是Authorization Code模式,第二种是ID-Token模式,这两种模式在使用场景上存在差异.本文将详细介绍Authorization Code模式 ...
- 【Insights直播】华为帐号服务,打造全场景安全帐号体系
在App运营过程中,如何保持用户增长和提升用户体验始终是开发者关注的问题,而作为用户使用体验感知的第一环节--帐号注册登录环节是不可忽视,且有很大提升空间的.如何提升帐号的注册登录体验?如何保证用户在 ...
- 华为帐号服务升级,助力应用快速验证用户身份
目前,在电商.金融.社交等多种行业的APP中,"帐号+短信验证码"已成为验证用户身份的主流方式.短信验证具有易操作.安全性高.成本低的优势,在用户注册.登录.绑定手机号等许多场景中 ...
- 华为帐号服务助力应用运营和用户转化
6月10日,华为HMS Core Sparkle创新沙龙在北京成功举办.本次沙龙以"打造精品应用 共创数智生活"为主题,与广大社交.出行.新闻资讯等领域的开发者朋友见面,探讨了各领 ...
- 【接入指南】一文带你了解华为帐号服务
什么是华为帐号服务 华为帐号是用户访问华为生态应用的凭证,拥有帐号的用户,可以畅享华为终端云服务应用等在内的众多华为服务.作为HMS Core基础开发服务能力之一,华为帐号服务为开发者提供了简单.安全 ...
- 华为帐号服务升级,提供通用短信验证码读取能力
目前,在电商.金融.社交等多种行业的APP中,"帐号+短信验证码"这种验证方式已成为验证用户身份的主流.短信验证具有易操作.安全性高.成本低的优势,在用户注册.登录.绑定手机号等许 ...
- 【华为游戏服务】同一游戏同一个手机号的华为帐号登录返回的playerId不同
问题描述 我们华为渠道的一款游戏,接到现网某玩家反馈:手机和平板上登录同一个华为帐号,但是两边的游戏数据不同步.经过我们分析,发现该用户使用的是同一个手机号的华为帐号,登录游戏时华为游戏SDK的get ...
最新文章
- 初始 DQN 程序 所遇到的问题
- apply call this arguments caller callee
- 高一数学集合知识点整理_高一数学 | 高一数学函数图像知识点总结,实用!
- python实现文件传输_Python使用socket实现简单的文件传输并校验
- container and Injection
- java 同步块(Java Synchronized Blocks)
- windows DNS服务器的配置
- 华为 linux文件系统,华为EROFS文件系统是什么
- clion ros debug clion配置ros环境及调试
- visual studio 提高速度的选项
- Android HTTP边下边播
- 阿里云云平台,物联网可视化web界面简单教程
- 格拉姆--施密特(Gram-Schmidt)正交化方法笔记
- 压缩为王-阿里第五届中间件复赛总结
- idea启动报符号缺失,无法启动与构建
- STM32MP157驱动开发——Linux 音频驱动
- 爆改YOLOV7的detect.py制作成API接口供其他python程序调用(超低延时)
- matlab实验报告四,matlab实验报告4
- SQL简单基础(2)
- 深度之眼 - Python学习笔记——第八章 文件、异常和模块
热门文章
- 美国中情局投资量子公司Q-CTRL
- gprs 神奇宝典java,联通GPRS加速转型绽放异彩
- Number、Number()和new Number()
- 弧形玻璃清洁机器人_一种用于弧形楼梯的清洁机器人的制作方法
- carplay逆向第四步操作:上层APP,通过NCM,实现相关网络协议
- 新型肺炎疫情自行隔离期间我们可以干的正事
- win10+安装Python 3.9.0b4+anaconda3
- 【新提醒】夏新大v安卓4.1尝鲜最新更新版本发布(包含进步版)1124更新 - 大V综合交流区 360论坛...
- 青岛职业技术学院计算机专业录取分数线,2017年青岛市中职技校录取分数线公布...
- 9.WireShark学习-使用WireShark分析SYN-Flooding攻击