鸿蒙授权
收藏我的收藏
适用场景
本能力适用于通过使用抖音短视频授权,获取使用抖音短视频登录第三方应用的权限。
背景信息
移动应用使用抖音短视频授权是基于 OAuth2.0 协议标准。抖音短视频授权采用 OAuth2.0 的授权码(authorization code)方式,首先需要获取一个临时票据,再用该临时票据获取令牌(access_token),然后通过该令牌获取用户信息。详情请参见总体授权说明。
准备工作
操作步骤
第一步:构造授权请求
let authRequest: OpenAuthRequest = new OpenAuthRequest(); authRequest.scope = "user_info"; // 用户授权时必选权限 authRequest.state = "AuthUseCase"; // 用于保持请求和回调的状态,授权请求后原样带回给第三方。 authRequest.callerLocalEntry = "EntryAbility" //回调的UIAbility名称,需要在modulue.json5中申明 authRequest.redirectUri = "https://xxx/xxx" // 填写配置好的applink
第二步:发起授权
通过 authorize 方法发起授权后,可以通过回调获取到结果。其中 authCode 为临时票据 code,用来换取 access_token,grantedPermissions 为用户授权后取得的授权域。
let listener: DouYinOpenListener = { onSuccess: (response: OpenAuthResponse, authCode: string, grantedPermissions: string) => { OpenSDKLog.i(TAG, `Auth success. authCode=${authCode} grantedPermissions=${grantedPermissions}`) }, onError: (response: OpenAuthResponse, errCode: number, errMsg: string) => { OpenSDKLog.i(TAG, `Auth error. errCode=${errCode} errMsg=${errMsg}`) } } douYinOpenSDK.createDouYinOpenApi()?.authorize(this.context, authRequest, listener)
第三步:获取 access_token
该接口及后续接口请求建议放在服务端调用,因为:
•
client_secret
是应用密钥,泄漏后可能会发生用户隐私数据泄漏的风险,存储在客户端并不安全,容易被窃取。•
access_token
为用户授权第三方接口调用的凭证,存储在客户端,可能会被窃取,泄漏后可能会发生用户隐私数据泄漏的风险。•
refresh_token
仅用于刷新access_token
,泄漏后相当于access_token
泄漏,泄漏后可能会发生用户隐私数据泄漏的风险。 建议将client_secret
和access_token
放到服务端来进行存储和使用。
参数说明
请求参数说明
参数 | 描述 | 是否必传 |
scope | 授权域是指您的应用使用抖音授权之后,可以获得抖音用户的哪些信息,目前开放了user_info 授权域,表示可以获得请求用户头像、昵称等相关信息的权限,如果有多种必选权限,权限之间请使用逗号隔开, "xxx,xxx"。 | 是 |
state | 用于保持请求和回调的状态,授权请求后原样带回给第三方,可传任意 String。 | 否 |
optionalScope0 | 用户可选授权域,默认不勾选。 | 否 |
optionalScope1 | 用户可选授权域,默认勾选。 | 否 |
verifyObject | 实名scope项 | 否 |
callerLocalEntry | 回调的UIAbility名称,需要在module.json中声明 | 是 |
callerBundleName | 当前应用的bundleName | 否 |
redirectUri | 回调Uri路径,传入应用的applink链接 | 是 |
commentId | 否 |
返回参数说明
返回值 | 说明 |
errorCode | •OK = 0:授权成功 •ERRORUNKNOW = -1:未知错误 •ERRORCANCEL = -2:用户手动取消 更多错误码请参考 CommonConstants.java。 |
authCode | 临时票据 code,用来换取 access_token。 |
state | 第三方程序发送时用于表示其请求的唯一性标志,由第三方程序调 openApi.authorize(request) 时传入,由抖音终端回传。 |
grantedPermissions | 第三方通过用户授权取得的授权域。 |
错误码
错误码 | 描述 |
OK = 0 | 成功 |
ERROR = 7 | 访问频繁,命中风控 |
ERROR_UNKNOW = -1 | 未知错误 |
ERROR_CANCEL = -2 | 用户手动取消 |
ERROR = -3 | 网络异常 |
ERRORNETWORKNO_CONNECTION = -12 | 网络未连接 |
ERRORNETWORKCONNECT_TIMEOUT = -13 | 网络连接超时 |
ERRORNETWORKTIMEOUT = -14 | 网络超时 |
ERRORNETWORKIO = -15 | 网络io错误 |
ERRORNETWORKUNKNOWNHOSTERROR = -16 | 网络未知host错误 |
ERRORNETWORKSSL = -21 | 网络ssl错误 |
ERROR_SYSTEM = 10001 | 系统异常 |
ERROR_PARAM = 10002 | 参数错误 |
ERROR_CONFIG = 10003 | 非法的配置(partner_client) |
ERROR_SCOPE = 10004 | 授权域配置错误 |
ERRORNPARAMS = 10005 | 缺少参数 |
ERRORREDIRECTURL = 10006 | 非法重定向url |
ERRORCODEEXPIRED = 10007 | Authorization code 失效 |
ERROR_TOKEN = 10008 | Access_Token 无效 |
ERROR_TICKET = 10009 | 非法参数 |
ERRORREFRESHTOKEN = 10010 | refresh token 过期 |
10011 | 应用信息有误,配置的包名/applink和实际的不符 |
10012 | 应用审核中,无法使用,联系运营同学 |
10013 | client_key或者client_secret错误 |
10014 | 客户端携带的client_key不一致 |
10015 | 应用类型错误,检查是否混用APP/WEB 类型的client_key |
10017 | 授权鉴权失败,需要补全开发信息。 |