Android uniapp SDK
概述
AuthCenter-uniapp 为广大安卓手机开发者提供了多种登录认证模块的SDK包,辅助开发者快速接入登录、注册、生物认证等功能。 AuthCenter-uniapp基于开源库AppAuth,也基于OAuth 2.0和OpenID Connect的现代认证的解决方案。在AppAuth的基础上,AuthCenter SDK还提供了Embedded Webview的认证场景: 场景一、AppAuth开源认证,基于Custom Tabs方案(Custom Tabs 是 Android 平台上的一个功能,它允许应用程序在内部使用对custom tabs API支持浏览器的标签页 ,而无需用户离开应用程序),但国内绝大部分浏览器对custom tabs API不支持,只能使用系统浏览器进行认证(跨应用); 场景二、Embedded Webview实现app内嵌webview认证方案,在Custom Tabs浏览器支持很少下,Embedded Webview下的认证方案,覆盖全机型,体验好、适配少、安全性高。该方案不仅支持通用的认证方法,还支持Passkeys的生物认证方法,使用Passkeys在APP内一键登录,快捷、安全、效率高,Embedded Webview内Passkeys的接入方法见【通用密钥认证】。 本文档接入的是离线打包机制,需要集成到HBuilderX环境运行&发行的需求,请参考uni-app官方介绍,相关的参数配置可以参考本文档介绍,uni-app的接入需要有一定的uni-app基础。
最新SDK包
| 模块名 | SDK包 | 最新版本 | 文件大小 | 下载链接 |
|---|---|---|---|---|
| 认证SDK | AuthnCenter-release-0.9-8.aar | 0.9.8 | 222,953 bytes | 下载地址 |
SDK包介绍
Android SDK支持的版本
| 系统版本 | 说明 |
|---|---|
| >= 4.4 | 场景二的接口可用的最低版本 |
| all supported versions of Android | 场景一 |
AuthnCenterUniSDK类
AuthnCenterUniSDK类 ,SDK的管理类,负责内部功能参数设置。
/**
* SDK初始化
*/
@UniJSMethod (uiThread = true)
public void initContext()
/**
* 启动SDK认证
* @param jsonObject,关于各个参数介绍,请参考native sdk接口设置部分
* Json格式:
* {
* "clientId":"",
* "redirectUrl":"",
* "endSessionRedirectUrl":"",
* "authorizationScope":"",
* "authorizationEndpointUrl":"",
* "authorizationTokenEndpointUrl":"",
* "userInfoEndpointUri":"",
* "endSessionEndpoint":"",
* "launchSheme":"",
* "defaultbrowser":{"packagename":"","useCustomTab":false },
* "discoveryUri":"",
* "authorizationScene":0 //0系统浏览器 ,1是webview
* }
*
* @param callback 认证返回接口
* 成功回调:json格式{"code":0,"access_token":"","id_token":"",expires_in:""}
* 失败回调:参考接口文档errCode
*
* */
public void getAuthenticationIntent(JSONObject jsonObject,UniJSCallback callback)
/**
* 清空本地的登录态
* @param callback : 清空后回调信息
* 成功回调: json格式{"code":200}
* 失败回调: 参考接口文档errCode
*/
public void endSession(JSONObject jsonObject,UniJSCallback callback)
/**
* 获取系统浏览器信息
* @param callback json JSONArray: [{"packagename":"" , "isCustomTab":,"icon":"" , "version":""}]
**/
public void getBrowserSelectors(JSONObject jsonObject,UniJSCallback callback)
其中getAuthenticationIntent认证必填项:
{
"clientId":"",
"redirectUrl":"",
"authorizationScope":"",
"authorizationEndpointUrl":"",
"launchSheme":"",
"authorizationScene":0 //0系统浏览器 ,1是webview
}
必须接口中参数来源说明(关于url域名的绝对地址拼装,参考【概述】-【域名地址配置说明】):
| 接口 | 参数名 | 参数来源/值 |
|---|---|---|
| setClientId | APPID | 超管在统一身份认证后台配置后提供,见【准备工作】 |
| setAuthorizationScope | scope | 超管在统一身份认证后台配置后提供,见【准备工作】 |
| setRedirectUri | Redirect url | 超管在统一身份认证后台配置后提供,见【准备工作】 |
| setAuthorizationTokenEndpointUri | Accesstoken url | 域名,相对路径 : /accessToken |
| setAuthorizationEndpointUri | Authorization url | 域名,相对路径 : /authorize |
SDK接口错误码
| Code值 | 定义 |
|---|---|
| -2 | 用户取消认证, 过程中用户遇到的实际错误可以通过浏览器上报参数获取 |
| -4 | 获取token过程中,用户主动取消 |
| -5 | 获取token失败 |
| 100 | 启动getAuthenticationIntent失败,与参数设置正确与否有关联 |
离线打包项目工程配置
SDK内部会接受scheme的响应,在认证过程中,非内嵌webview认证场景会通过scheme通知app,所以在sdk内部manifest.xml使用appAuthRedirectScheme参数占位scheme字符串,APP项目工程的build.gradle脚本需配置:
manifestPlaceholders.putIfAbsent("appAuthRedirectScheme", "net.rj.appauth")
”net.rj.appauth“为例子,接入方可以修改为自己的命名。在调用SDK接口中,需要通过接口:getAuthenticationIntent的launchSheme设置到SDK中.
HBuilderX工程调用示例
请通过HBuilderX工程编写vue代码,并生成可执行的js代码,拷贝到离线打包工程assets对应目录下。
var rjAuthorModule = uni.requireNativePlugin("rj_authcenter");
const modal = uni.requireNativePlugin('modal');
data() {
return {
formData:{
clientId:'OC4wNS4wNS4wNy4wMC4wMy4wMS4wMS4w',
redirectUrl:'https://s10sso.ruishan.cc/gate/public/sdkAuth/index.html',
endSessionRedirectUrl:'https://s10sso.ruishan.cc/gate/public/sdkAuth/index.html',
authorizationScope:'openid',
authorizationEndpointUrl:'https://s10sso.ruishan.cc/cas/oidc/authorize',
authorizationTokenEndpointUrl:'https://s10sso.ruishan.cc/cas/oidc/accessToken',
userInfoEndpointUri:'https://s10sso.ruishan.cc/cas/oidc/profile',
endSessionEndpoint:'https://s10sso.ruishan.cc/cas/oidc/logout',
launchSheme:'net.rj.appauth',
defaultbrowser:'{"packagename":"","useCustomTab":false }',
discoveryUri:'',
authorizationScene:0 //0系统浏览器 ,1是webview
}
};
}
getAuthenticationIntent() {
rjAuthorModule.initContext();
rjAuthorModule.getAuthenticationIntent(JSON.stringify(this.formData),(ret) => {
modal.toast({
message: ret,
duration: 1.5
});
})
}
Embedded Webview内通用密钥认证集成
国内支持通行密钥的机型不是很多,其中对通行密钥有适配的为华为和OPPO机型,使用系统浏览器可以通过Passkeys注册和认证。在APP内,场景一的使用,可以天然的使用Passkeys的功能;但在embedded webview上,passkeys是不支持的,需要我们单独的接入平台的认证器SDK。 本篇介绍的是使用Embedded Webview接入通行密钥的方案。当前webview支持华为和OPPO的机型,需要分别对两个平台进行接入配置。
注: 场景二使用Passkeys必须配置该章节内容。
Embedded Webview内通信密钥支持平台
| 平台 | 版本 |
|---|---|
| 华为机型 | >=4.0(不支持HarmonyOS NEXT) |
| OPPO | >= 2022年发布机型 |
华为webview通行密钥接入
配置AppGallery Connect
- a. 注册成为华为开发者
- b. 创建应用
- c. 配置AppGallery Connect签名指纹
- d. 打开服务开关
- 以上详细操作手册:https://developer.huawei.com/consumer/cn/doc/Security-Guides/config-agc-0000001050262772
集成HMS Core配置文件,如果在AppGallery Connect中开通了相关服务则需要将“agconnect-services.json”文件添加到您的App中。
- a. 登录AppGallery Connect网站,点击“我的项目”。
- b. 在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。
- c. 在“项目设置 > 常规”页面的“应用”区域,点击“agconnect-services.json”下载配置文件。

- d.离线版本下的sdk打包方法:将“agconnect-services.json”文件拷贝到应用级根目录下。
- e.HBuilderX工程配置 :拷贝文件到 nativeplugins/${yourpluginname}/android/assets

OPPO webview通行密钥接入
- 创建一个 JSON 文件。例如,如需声明网站
https://s10sso.ruishan.cc和软件包名 com.ruishan.authcenter 的 Android 应用可以共享通行密钥,请使用以下内容创建一个名为 fido2-trusted-facets.json 的文件:relation 字段是包含一个或多个字符串的数组,用于描述所声明的关系。如需声明应用和网站可共享登录凭据,请指定字符串 delegate_permission/common.get_login_creds。 target 字段是一个对象,用于指定声明所适用的资源。 以下字段用于标识 Android 应用:[ { "relation" : [ "delegate_permission/common.get_login_creds" ], "target" : { "namespace" : "android_app", "package_name" : "com.ruishan.authcenter", "sha256_cert_fingerprints" : [ SHA_HEX_VALUE ] } } ]
| namespace | android_app |
|---|---|
| package_name | 应用的清单文件中声明的软件包名称,例如 com.ruishan.authcenter |
| sha256_cert_fingerprints | 应用的 签名证书 的 SHA256 指纹。 |
- 将这个 JSON 文件托管在登录网域中
例如,如果你的登录网域是 s10sso.ruishan.cc,请将 JSON 文件托管在以下位置。Digital Asset Links 文的 MIME 类型需为 JSON。确保服务器在响应中发送 Content-Type: application/json 标头。
https://s10sso.ruishan.cc/.well-known/fido2-trusted-facets.json
统一认证服务端配置:识别APP认证
sso组件:application-sys.properties中加入APP的签名:
cas.authn.mfa.web-authn.core.allowed-originsandroid:apk-key-hash:aSCmCAdGEhSJ3kMYwTaM+bT50xosoqoQoIwSIjKfm+g
其中aSCmCAdGEhSJ3kMYwTaM+bT50xosoqoQoIwSIjKfm+g为例子,需要填入接入APP的key-hash。
计算 Key Hash: 使用以下命令来计算 Key Hash:
echo -n "<your_sha1_value>" | openssl sha1 -binary | openssl base64
将 <your_sha1_value> 替换为你APP签名的SHA1值。