目录

安全认证

安全认证机制

整体流程

名词解释
App: 开发者开发之应用
SDK: MIMC SDK
appProxyService: 代理认证服务
TokenService: 小米认证服务
appId: 应用ID,小米开放平台申请分配
appKey: 应用Key,小米开放平台申请分配
appSec: 应用Sec,小米开放平台申请分配
appAccount: 应用账号系统内用户账号ID,应用账号系统内唯一
token: 小米认证服务(TokenService)下发Token

服务端实现代理认证服务

服务端实现代理认证服务(appProxyService),顺序做以下事情:

    1. 代理认证服务存储appKey/appSec等敏感数据
       访问小米认证服务需要appKey/appSec等,这些数据非常敏感,
       如果放在应用端代码中会非常容易泄露,而且一旦泄漏无法更新,
       而存储在代理认证服务,则泄露风险很低,一旦泄露也可以快速更新。
    2. 代理认证服务做账号合法性认证
       代理认证服务需要保证登录的appAccount在其账号系统内是合法有效的
    3. 调用小米认证服务(TokenService)
       代理认证服务在保证用户合法以后,调用小米认证服务,
       并将[小米认证服务下发的原始数据]适当封装后,返回给安全认证接口

应用端实现安全认证接口

应用端实现安全认证接口,做以下事情:

    1. 访问代理认证服务(appProxyService)
    2. 代理认证服务返回结果中解析[小米认证服务下发的原始数据]并返回

注意:

    访问代理认证服务(appProxyService)传入的appAccount,
    必须与User构造函数传入的appAccount相同

各语言平台SDK安全认证接口实现逻辑:

Android:
Java:
C++:
    实现MIMCTokenFetcher.fetchToken(),同步访问代理认证服务,
    从代理认证服务返回结果中解析[小米认证服务下发的原始数据]并返回
WebJS:
    实现function fetchMIMCToken(),同步访问代理认证服务,
    从代理认证服务返回结果中解析[小米认证服务下发的原始数据]并返回
C#:
    实现IMIMCTokenFetcher.fetchToken(),同步访问代理认证服务,
    从代理认证服务返回结果中解析[小米认证服务下发的原始数据]并返回
iOS:
    初始化NSMutableURLRequest,用于异步访问应用代理认证服务
    实现parseTokenDelegate,从NSMutableURLRequest异步返回结果中
    解析[小米认证服务下发的原始数据]并返回
GO:
    实现FetchToken() *string,同步访问代理认证服务,
    从代理认证服务返回结果中解析[小米认证服务下发的原始数据]并返回

如何调用小米认证服务

参数列表
Variable Meanings
$appId 小米开放平台申请的AppId
$appKey 小米开放平台申请的AppKey
$appSecret 小米开放平台申请的AppSecret
$appPackage 小米开放平台申请的AppPackage
$appAccount 用户在APP帐号系统内唯一ID
$chid MIMC服务的标识,为常量9
$uuid $appAccount在MIMC内对应userId,开发者可忽略
$token $appAccount在MIMC系统中的token
  • HTTP 请求

      curl "https://mimc.chat.xiaomi.net/api/account/token" -XPOST
        -d '{"appId":$appId,"appKey":$appKey,"appSecret":$appSecret,"appAccount":$appAccount}'
        -H "Content-Type: application/json"
    
  • JSON结果

    {
      "code": 200,
      "message": "success",
      "data": {
          "appId": $appId,
          "appPackage": $appPackage,
          "appAccount": $appAccount,
          "miChid": $chid,
          "miUserId": $uuid,
          "miUserSecurityKey": $appSecret,
          "token": $token
      }
    }
    
备注:对于以上JSON结果,应用方不需要理解其格式,最终通过安全认证接口原样返回即可

results matching ""

    No results matching ""