Android SDK

概述

AuthCenter为广大安卓手机开发者提供了多种登录认证模块的SDK包,辅助开发者快速接入登录、注册、生物认证等功能。 AuthCenter SDK基于开源库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的接入方法见【通用密钥认证】。

最新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 场景一

AuthnCenterSDK类

AuthnCenterSDK类, SDK的管理类,负责内部功能参数设置。

/**
 *  设置使用认证的场景
 * @param scene
 *      BROWSER(0)              系统浏览器(包含CustomTabs场景),
 *      EmbeddedWebView (1)     内嵌浏览器 ;
 *
 *      使用BROWSER(0),但未使用setDefaultBrowser设置目标浏览器,SDK打开BROWSER规则: //1. support custom tabs
 *          1.1 interface set browser (under supporting)
 *          1.2 系统原生浏览器 (under supporting)
 *          1.3 Chrome > Edge > FireFox > Opera > Samsung    (under supporting)
 *              match package + version
 *          2. system browser
 *              2.1 interface set browser
 *          2.2 系统原生浏览器
 *          2.3 default browser
 **/
public void setAuthorizationScene(AuthorizationScene scene)


/**
 * 设置配置服务器地址,保留选项,暂未启用
 * @param discoveryUrl    DiscoveryUri地址
 */
public void setDiscoveryUri(String discoveryUrl)

/**
 * 设置SDK使用哪个浏览器, 该参数在设置setAuthorizationScene为BROWSER(0)生效
 *
 * @param packageName      浏览器packageName
 * @param bUseCustomTab    是否使用CustomTab模式,注:选择的浏览器不支持CustomTabs模式,则会直接打开该浏览器认证
 */
public void setDefaultBrowser(String packageName , boolean bUseCustomTab) 

/**
 *  SDK响应外部shceme的协议,需要在集成工程中配置
 *  在工程的build.gradle中: manifestPlaceholders.putIfAbsent("appAuthRedirectScheme", "net.rj.appauth")
 *
 * @param launchScheme shceme协议,如上demo所示的net.rj.appauth
* */
public void setLaunchScheme(String launchScheme)


/**
 * 设置ActionBar背景色
 * @param actionBarColor 背景色
 * */
public void setActionBarColor(int actionBarColor)

/**
 * 设置StatusBar背景色
 * @param stutasColor 背景色
* */
public void setStatusBarColor(int stutasColor) 

/**
 * 初始化SDK
 * @param context 上下文
 **/
public void initInterface(Context context) 

/**
 * 设置认证信息,client id设置
 * @param clientid 认证app Client id
 * */
public void setClientId(String clientid) 

/**
 * 设置认证信息 , 登录成功定位的url
 * @param url 认证redirect url
 * */
public void setRedirectUri(String url) 

/**
 * 设置认证信息 ,退出登录后定位url, 保留参数,暂未启用
 * @param url 退出登录redirect url
 * */
public void setEndSessionRedirectUri(String url) 

/**
 * 设置认证信息,scope设置
 * @param scope 认证Scope
 * */
public void setAuthorizationScope(String scope)

/**
 * 设置认证信息:认证地址
 * @param url 认证地址
 * */
public void setAuthorizationEndpointUri(String url)

/**
 * 设置认证信息:token request url
 * @param url 认证token获取
 **/
public void setAuthorizationTokenEndpointUri(String url) 


/**
 * 设置认证信息 , 使用https
 * @param bHttps :true,使用https
 **/
public void setHttpsRequired(boolean bHttps)
/**
 * 设置允许使用webview中JSAPI的域名
 * 内置白名单: authorizationEndpointUrl redirectUrl endSessionRedirectUrl endSessionRedirectUrl
 * @param jsonUrls :urls为json数组
 * */
public void setJsAPIPermissions(String jsonUrls)

/**
 * 清空本地的登录态
 * @param context :上下文
 * @param callback : 清空后回调信息
 *                 成功回调: json格式{"code":200}
 *                 失败回调: 参考接口文档errCode
 */
public void endSession(Context context , AuthnCenterCallback callback)

/**
 * 在参数设置成功下,启动SDK进行认证
 * @param context :上下文
 * @param callback : 认证成功后回调
 *      成功回调:json格式{"code":0,"access_token":"","id_token":"",expires_in:""}
 *      失败回调:参考接口文档errCode
 **/
public void getAuthenticationIntent(Context context, AuthnCenterCallback callback)


/**
 * 获取系统浏览器信息
 * @param context :上下文
 * @return  json string: [{"packagename":"" , "isCustomTab":,"icon":"" , "version":""}]
 **/
public String getBrowserSelectors(Context context )

必须接口中参数来源说明(关于url域名的绝对地址拼装,参考【概述】-【域名地址配置说明】):

接口 参数名 参数来源/值
setClientId APPID 超管在统一身份认证后台配置后提供,见【准备工作】
setAuthorizationScope scope 超管在统一身份认证后台配置后提供,见【准备工作】
setRedirectUri Redirect url 超管在统一身份认证后台配置后提供,见【准备工作】
setAuthorizationTokenEndpointUri Accesstoken url 域名,相对路径 : /accessToken
setAuthorizationEndpointUri Authorization url 域名,相对路径 : /authorize

AuthnCenterCallback回调接口

/**
*  成功后回调
@param authInfo , 请参考输入接口说明
*/
public void onSuccess(String authInfo);

/**
* 失败后回调
* errCode参考errCode
*/
public void onFailure(long errorCode, CharSequence errString);

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接口中,需要通过接口:setLaunchScheme设置到SDK中。

Embedded Webview内通用密钥认证集成

国内支持通行密钥的机型不是很多,其中对通行密钥有适配的为华为和OPPO机型,使用系统浏览器可以通过Passkeys注册和认证。在APP内,场景一的使用,可以天然的使用Passkeys的功能;但在embedded webview上,passkeys是不支持的,需要我们单独的接入平台的认证器SDK。 本篇介绍的是使用Embedded Webview接入通行密钥的方案。当前webview支持华为和OPPO的机型,需要分别对两个平台进行接入配置。

注: 场景二使用Passkeys必须配置该章节内容。

Embedded Webview内通信密钥支持平台

平台 版本
华为机型 >=4.0(不支持HarmonyOS NEXT)
OPPO >= 2022年发布机型

华为webview通行密钥接入

  1. 配置AppGallery Connect

  2. 集成HMS Core配置文件,如果在AppGallery Connect中开通了相关服务则需要将“agconnect-services.json”文件添加到您的App中。

    • a. 登录AppGallery Connect网站,点击“我的项目”。
    • b. 在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。
    • c. 在“项目设置 > 常规”页面的“应用”区域,点击“agconnect-services.json”下载配置文件。 image-2024102917470108
    • d. 将“agconnect-services.json”文件拷贝到应用级根目录下。

    image-2024102917470109

OPPO webview通行密钥接入

  • 创建一个 JSON 文件。例如,如需声明网站 https://s10sso.ruishan.cc 和软件包名 com.ruishan.authcenter 的 Android 应用可以共享通行密钥,请使用以下内容创建一个名为 fido2-trusted-facets.json 的文件:
    [
    {
      "relation" : [
        "delegate_permission/common.get_login_creds"
      ],
      "target" : {
        "namespace" : "android_app",
        "package_name" : "com.ruishan.authcenter",
        "sha256_cert_fingerprints" : [
          SHA_HEX_VALUE
        ]
      }
    }
    ]
    
    relation 字段是包含一个或多个字符串的数组,用于描述所声明的关系。如需声明应用和网站可共享登录凭据,请指定字符串 delegate_permission/common.get_login_creds。 target 字段是一个对象,用于指定声明所适用的资源。 以下字段用于标识 Android 应用:
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值。
©2025 锐捷网络股份有限公司 all right reserved,powered by Gitbook该文章修订时间: 2026-05-07 11:14:26

results matching ""

    No results matching ""