MonkeyKing第三方授权登录源码分析

MonkeyKing第三方授权登录源码分析_第1张图片
image.png

前言

关于MonkeyKing的使用可以参考前面的两边文章以及github地址
1、MonkeyKing第三方分享
2、MonkeyKing第三方授权登录
3、github地址


MonkeyKing的授权登录以微信为例,其他的第三方授权只要是基于OAuth,都是采用类似的方式进行。

一、授权过程

1、在项目设置中设置微信的URL Schemes,不同的第三方使用的规则不同,比如微信的schemes是使用的我们在微信第三方开发者帐号为自己应用注册的appId

MonkeyKing第三方授权登录源码分析_第2张图片
设置微信schemes.png

2、在应用启动didFinishLaunchingWithOptions方法中注册微信对应的appId和appKey

func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

3、发起微信授权

MonkeyKing.oauth(for: .weChat) { [weak self] (dictionary, response, error) in
            // dictionary包含的信息有 openid,unionid,refresh_token,scope,access_token,expires_in
     
        }

三、授权流程分析

1、URL Schemes的作用,其实就是从其他app跳转到改应用的入口,如果配置了该协议,那么通过该协议就可以打开自己的应用。比如配置的URL Schemes为MyApp那么通过手机的safari输入MyApp://就会在浏览器中弹出是否打开本应用的提示

MonkeyKing第三方授权登录源码分析_第3张图片
image.png
MonkeyKing第三方授权登录源码分析_第4张图片
image.png

同样的,只要清楚了这个原理,就很容易知道OAuth授权的流程

MonkeyKing第三方授权登录源码分析_第5张图片
正常授权流程

1)应用在第1步发起授权,需要打开第三方应用,如同自己的应用设置scheme一样,如果第三方应用没有设置URL Scheme,那么应用是无法发起授权的。如果手机没有安装对应的应用,MonkeyKing采用网页的形式发起授权
常见的一些第三方应用URL Scheme如下: 参考文章

 QQ  mqq:// 
 微信  weixin://  
 腾讯微博    TencentWeibo://    
 淘宝  taobao://  
 支付宝     alipay://  
 微博  sinaweibo://

需要在应用的info.plist文件中进行配置

MonkeyKing第三方授权登录源码分析_第6张图片
image.png
MonkeyKing第三方授权登录源码分析_第7张图片
微信发起授权方式

2)第2步可能是web授权,也可能是网页授权,也可能是第三方应用打开web页面授权,不管怎么样,都会有一个授权页面,用户点击授权页面确认按钮之后,授权页面,或者第三方应用会根据配置的URLScheme或者其他规则跳转到发起的应用。比如微信授权都会为每一个应用分配一个appId,应用需要将这个appId写入到URL Schemes中。应用发起微信授权成功后,微信就会调用这个appId构成的scheme,并且附带一些授权的参数打开发起授权的应用。
比如微信授权成功之后,会返回一个如下的url:

wx4868b35061f87885://oauth?code=003KLKZ32djWhL0RwHY32LmzZ32KLKZv&state=Weixinauth

用户取消授权 会返回:

wx4868b35061f87885://platformId=wechat

3)4)5)授权成功后的url开头就是我们配置的appId,code就是我们之后获取微信授权需要的code。
在appdelegate中下面方法会拦截到这个url,然后MonkeyKing对这个url进行处理

        func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        if MonkeyKing.handleOpenURL(url) {
            return true
        }
        return false
    }

拦截到url之后,通过前缀和返回的内容进行判断,如果是"wx",并且url中包含"state=Weixinauth"就认为是OAuth授权,如果包含wapoauth就是网页授权,包含"platformId=wechat"并且不包含state就是授权失败

MonkeyKing第三方授权登录源码分析_第8张图片
判断微信Oauth授权,获取code

拿到code之后,就可以发起获取授权信息的请求了,最后将得到的授权信息回调,然后我们就可以通过json获取到回掉信息,进行下一步处理

MonkeyKing第三方授权登录源码分析_第9张图片
获取授权信息

你可能感兴趣的:(MonkeyKing第三方授权登录源码分析)