简单的安卓应用授权认证(JNI)

最近一直在做公司的一个安卓开发框架,含so库,接近尾声了,领导提出一个需求,要求使用这个框架的开发者必须有我们的授权才可以,但是对方发布的应用后又不能被此授权限制——要不然所有的应用都来要授权那就麻烦了。

分析:

既然是限制开发者,那么就必须要区分debug版本和release版本,也就是框架的授权限制功能只对debug版本有效,而对release版本无效;然后就是需要一个调试设备的一个唯一ID,这样授权码是绑定在固定的设备的,只要有新的调试设备就需要新的授权码,一般公司里也就是十几个设备吧,这个申请量级完全可以接受。

思路:

因为正好这个框架需要so库的支持,这样在so库加载时的int JNI_OnLoad(JavaVM* jvm, void* reserved)方法中可以完成验证。

关于debug和release版本的区分,安卓系统提供了一个debugable属性可以实现,只要是从Eclipse或者ADT的集成环境里直接运行或者调试,都可以判断出是否是debug版本;

关于安卓设备的ID,安卓本身提供好几种ID的获取,我最终使用的是security类的ID,   Settings.Secure.getString(ContentResolver,Settings.Secure.ANDROID_ID),这个ID是在安卓设备第一次启动的时候自动生成的,如果刷机的话则可能会改变。

授权码的存放位置就放在AndroidManifest中的application结点下,增加一个meta结点,并可以自定义信息的名称,那么现在就是准备工作就全了.

实现:

1. JNI层的int JNI_OnLoad(JavaVM* jvm, void* reserved)完成验证

2.JNI层判断程序是否为debug版本,为防止java代码被反编译,所以获取debug属性和判断都在JNI层进行,可以参考java层的如下代码,即将一下代码改编为C++代码:

public  boolean isDebugMode(){
		ApplicationInfo info = this.getApplicationInfo();
		return (0!=((info.flags) & ApplicationInfo.FLAG_DEBUGGABLE));
	}

3.JNI层获取安卓设备的唯一ID,可以参考java代码,即将一下代码改编为C++代码:

 String id = Settings.Secure.getString(this.mainActivity.getContentResolver(), 
             Settings.Secure.ANDROID_ID);

4.获取Manifest中的meta中的授权码,这个就没必要非得在JNI层实现了,可以在java层获取,然后传递给JNI层,参考是如下的java代码:

ApplicationInfo info=context.getPackageManager().getApplicationInfo(con.getPackageName(),PackageManager.GET_META_DATA);
String key=info.metadata.getString("permissionKey");

5.接下来就是加密解密以及最后的适当加花加壳的取舍了,就不再细说了。

时间: 2024-10-20 11:14:21

简单的安卓应用授权认证(JNI)的相关文章

新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

---------------------------------------------------------------------------------------------- [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51939853作者:朱培      ID:sdksdk0      邮箱: [email protected] -------------------------

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

选择适合的Node.js授权认证策略

选择适合的Node.js授权认证策略 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 英文原文:https://stormpath.com/blog/choosing-nodejs-authentication-strategy/ Node.js正在兴起!我从2010年就开始使用Node工作,那个时侯我看着它从一个很小的个人项目成长为一个全功能的.能够让现代开发者用于构建真实.重要的大型应用的主要工具.一个完整的解决方案生态系统如雨后春笋般涌现,既帮

如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作

开发共享软件,传统的是采用注册码验证方式,这种方式是大多数共享软件采用的方式,另外还有一种常见的验证方式,就是通过网络授权认证的方式,这种方式通过在程序中调用服务器的服务进行.一般具有验证用户名可用.注册新用户.用户登录认证.用户修改密码等操作,另外还需要配备一个网络授权入口给管理员对注册的用户进行授权控制. 这个是为了进行网络授权认证搭建的一个简单的管理后台,用户在共享软件客户端通过调用服务器的服务连接,可以注册一个新用户,或者进行登录获取身份信息(试用.已注册.已禁用等状态),还可以通过服务

智能机器人“小昆”的实现(一)项目介绍以及图灵授权认证

一.项目介绍 这个小项目开发了一个叫做“小昆”的图灵智能机器人,它可以陪你聊天,听你抱怨.而且可以在后台设置机器人知识库,打造你的专属智能机器人.我们先看几张运行的效果图,介绍一下项目吧.如下图: 功能说明:其实很简单,只要你在编辑框中输入你想要对机器人小昆说的话,然后点击发送按钮(即那个蝴蝶),就可以愉快的跟小昆聊天了. 原理说明:本项目智能机器人小昆的实现主要是调用了第三方的API,即图灵机器人的接口.而其他的模块则是android原生的代码编写.并不算是复杂. 通过本项目你可以学习到: (

将 Shiro 作为应用的权限基础 三:基于注解实现的授权认证过程

授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限. 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限等等. 一.用户权限模型 为实现一个较为灵活的用户权限数据模型,通常把用户信息单独用一个实体表示,用户权限信息用两个实体表示. 用户信息用 LoginAccount 表示,最简单的用户信息可能只包含用户名 loginName 及密码 password 两个属性.实际应用中可能会包含用户是否被禁用,用户信息是否过期等信息. 用户权限信息用 Role 与 Per

新浪微博授权认证的实现

最近准备找工作,着手看了下新浪微博的资料,前几天通过调用客户端实现了微博分享功能.这两天在网上搜了些资料,结合官方的开发文档,实现了授权验证部分. 下面按类作为章节来总结下验证这部分的实现: Constants类 这个类内容很少,但起到很大作用,能否成功获取授权关键就在于该类中的一些变量如APP_KEY和SECRET的赋值是否正确. package com.example.shareweibobyapi; //授权类 public interface Constants { /** 当前 DEM

c#如何对共享软件的登录,注册用户等进行网络授权认证

用c#开发共享软件,传统的是采用注册码验证方式,这种方式是大多数共享软件采用的方式,另外还有一种常见的验证方式,就是通过网络授权认证的方式,这种方式通过在程序中调用服务器的服务进行.一般具有验证用户名可用.注册新用户.用户登录认证.用户修改密码等操作,另外还需要配备一个网络授权入口给管理员对注册的用户进行授权控制. 这个是为了进行网络授权认证搭建的一个简单的管理后台,用户在共享软件客户端通过调用服务器的服务连接,可以注册一个新用户,或者进行登录获取身份信息(试用.已注册.已禁用等状态),还可以通

【转】【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,博主只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一