APPSDK Oauth 使用 BroadLink 账号登录

1. 概述

OAuth(开放授权)是⼀一个开放标准,允许⽤用户授权第三⽅方⽹网站访问他们存储在另外的服务提供者上的信息,⽽而不不需要将用户名和密码提供给第三⽅网站或分享他们数据的所有内容。

客户自身存在账号系统,在需要远程控制 BroadLink 相关产品功能的时候,唤醒 BroadLink Oauth 页面,成功后返回 accessToken 等信息,然后传给 SDK,实现登录。

2. 应用程序注册

对于⼀一个应⽤用程序来说,如果它想要使⽤用OAuth,那么它需要在DNAKit上进⾏行行注册,需要提供以下信息:

  1. 应⽤用程序名称(Application Name)
  2. 回调URL
  3. 应⽤用程序图标

在DNAKit注册成功之后,会提供给应⽤用程序⼀一个客户端认证信息,包含:

  1. client id
  2. secret key
  3. 授权URL
  4. Token URL
  5. Login URL

3. SDK 使用流程

APPSDK 采⽤用 OAuth 2.0 的隐式授权模式(Implicit) 进⾏行行授权。基本授权流程⼊入下:

Oauth流程

第三⽅方客户端调⽤用 APPSDK OAuth 接⼝,传⼊入DNAKit申请到的 clientId 以及 回调 redirect_uri,然后 APPSDK 唤醒授权登录页面,用户在完成用户名和密码输入,完成登录之后, 则会跳转回原APP,拿到 access_token 等参数。

4. 集成方式

//Android Gradle 集成
compile 'com.ibroadlink:BLLetPluginAndroid:2.6.0'
//iOS cocoapod 集成
source 'https://github.com/ibroadlink/BLLibSpecs.git'

target 'Your APP ' do
    pod 'BLLet/BLLetPlugins', '~> 2.7'
    pod 'BLLet/BLLetBase', '~> 2.7'
end

5. API 接口介绍 – BLOAuth

	/**
     * 初始化 BLOAuth 类
     *
     * @param context APP Context
     * @param lid license id
     */
    public static void init(Context context, String lid);

    /**
     * 启动 Oauth 认证
     * @param client_id    申请到的 client_id
     * @param redirectURI  申请时填的 redirectURI
     * @return 启动是否成功
     */
    public static Boolean authorize(String client_id, String redirectURI);


    /**
     * 处理返回信息,获取 accessToken 和 expires_in
     * @param intent 认证返回信息
     * @return 解析获取结果
     */
    public static BLOauthResult handleOpenURL(Intent intent);
    /**
     * 初始化BLOAuth对象
     * param clientId 第三方应用在互联开放平台申请的唯一标识
     * param redirectURI 第三方应用在互联开放平台申请所填的URL,必须一致
     * return 初始化后的授权登录对象
     */
    - (id)initWithLicenseId:(NSString *)licenseId cliendId:(NSString *)clientId redirectURI:(NSString *)redirectURI;

    /**
     * 处理应用拉起协议
     * param url 处理被其他应用呼起时的逻辑
     * return 处理结果,YES表示成功,NO表示失败
     */
    - (void)HandleOpenURL:(NSURL *)url completionHandler:(BLOAuthBlock)completionHandler;

浏览器回到APP,需要设置 URL Scheme, 规则为: bl + clientId , 例如:

OauthAndroid

Oauth_iOS