# IDP2-OIDC-NativeApp-Android **Repository Path**: bjzyt/IDP2-OIDC-NativeApp-Android ## Basic Information - **Project Name**: IDP2-OIDC-NativeApp-Android - **Description**: OIDC Native APP Android - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 0 - **Created**: 2016-12-28 - **Last Updated**: 2025-07-30 ## Categories & Tags **Categories**: android-modules **Tags**: None ## README # OIDC_Native_SDK-Android开发文档 # ## 1简介 ## ### 1.1目的 ### 本文档旨在为Android开发者提供详细的OIDC_Native_SDK集成指南。其中包含Jar包导入指南、资源导入指南、API说明和调用示例等。OIDC_Native_SDK+RP Server可以实现在IDP身份管家直接打开指定APP实现免密码登录。 ### 1.2范围 本文档用于期望集成九州云腾OIDC_Native_SDK的开发人员,为其提供简明清晰的集成指南,让他们能迅速将OIDC_Native_SDK集成到自己的OIDC协议的项目中。 ### 1.3实现原理 ![输入图片说明](http://git.oschina.net/uploads/images/2017/0105/122546_0088a45b_1141486.png "图1") 第1步:登录IDP身份管家,在免登应用中点击需要打开的应用,请求IDP Server去获取rpToken,idToken 第2步:IDP Server校验身份,返回rpToken,idToken给IDP身份管家(rpToken,idToken是客户端请求登录的凭证) 第3步:IDP身份管家通过URL跳转打开集成了OIDC_Native_SDK的APP,IDP身份管家通过URL传递rpToken,idToken给客户端。 第4步:集成了OIDC_Native_SDK的APP通过解析URL获取传过来的rpToken,idToken 第5步:App通过获取到的rpToken,idToken,请求RP Server,进行登录请求 第6步:RP Server接收到请求后,去IDP Server验证rpToken,idToken 第7步:IDP Server 返回验证结果给RP Server 第8步:RP Server 处理IDP Server返回的结果,根据结果返回对应的结果给App ## 2准备工作 ## ### 2.1服务端添加应用 ### ![输入图片说明](http://git.oschina.net/uploads/images/2017/0105/112736_a152b954_1141486.png "添加应用") _Android FacetId为AndroidMainfest中配置的,请按照配置的要求进行配置。服务端要与客户端保持一致_ 。 ### 2.2添加账号关联 ### ![输入图片说明](http://git.oschina.net/uploads/images/2017/0105/112748_17539444_1141486.png "关联账号") _子账号:关联APP的登录账号_ ## 3集成指南 ## ### 3.1导入SDK包 ### 复制libsoidc_native_sdk1.0.jar到工程libs/目录下 ### 3.2配置AndroidManifest.xml ### **申请访问网络权限** ``` ``` **在OIDC协议类型的APP中,设置启动Acitivity的启动模式** ``` android:launchMode="singleTask" ``` **在要启动的Activity中添加一个过滤器,用于和IDP身份管家进行交互,数据传递。android:scheme的值为Android FacetId,请和服务器端保持一致。** ``` ``` _注:Android FacetId=(android:scheme)的值即自定义的内容 (自定义数据为长度不超过12位的英文字母组成的字符串)_ ### 3.3工程中添加代码 ### **初始化OIDC_Native_SDK** 在自己定制的Application的onCreate()方法中添加代码进行OIDC_Native_SDK的初始化。只要添加之后便可以使用OIDC_Native_SDK的全部功能了。 ``` RpSSOApi.init(getApplicationContext()); ``` **获取rpToken,idToken** 执行图中第4步的操作, App在注册的Activity 中解析URL获取rpToken,idToken,vpnVendor,(当前应用使用了VPN功能,则vpnVendor为VPN的厂商名称)获取rpToken,idToken,vpnVendor后进行登录请求。 在onCreate方法中获取。(集成APP无任何后台进程时,获取rpToken,idToken) ``` Intent intent = getIntent(); if (intent !=null) { Uri uri = intent.getData(); if (uri != null) { String rpToken = uri.getQueryParameter("rpToken"); String idToken = uri.getQueryParameter("idToken"); String vpnVendor= uri.getQueryParameter("vpnVendor"); } } ``` 在onNewIntent方法中获取。(集成APP在后台打开时,获取rpToken,idToken,vpnVendor) ``` @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); Uri uri = intent.getData(); if (uri != null) { String rpToken = uri.getQueryParameter("rpToken"); String idToken = uri.getQueryParameter("idToken"); String vpnVendor= uri.getQueryParameter("vpnVendor"); } } ``` _注:rpToken,idToken为验证的重要依据,,请配合服务端的RP Server进行第5步登录请求,登录时rpToken,idToken,必须放到到请求的header中_ ``` public static Map getHostAuthHeader(String token, String idToken) { Map params = new ArrayMap<>(); params.put("Authorization", "bearer " + token); params.put("idToken", idToken); return params; } ``` ## 4API ## ### 初始化OIDC_Native_SDK ### ``` public static void init(Context context) ``` **参数说明:** Context context : 应用的context **方法说明:** init只需要在应用程序启动时调用一次即可,这样就可以使用OIDC_Native_SDK的所有功能了。 ## 5代码混淆 如果您启用了代码混淆,请在您的 proguard-rules.pro 中添加以下代码 ``` -keep class com.idsmanager.ssosublibrary.** { *; } -dontwarn com.idsmanager.ssosublibrary.** ``` ## 6系统版本支持 ## 目前SDK 支持 Android 4.0及以上版本的手机。如需更多技术支持,请联系info@idsmanager.com,或致电 010-58732285。