Web或H5中使用OAuth2授权机制来获取第3方平台用户基础信息,进而实现业务逻辑,这是现在比较流行的做法(基本上OAuth已经成为开放授权事实上的标准了)。
对接第3方平台OAuth2用户授权功能时,首先需要在第3方开放平台中填写授权回调域名,一般允许用户填写的授权回调域名都有数量限制(通常为1个),这就造成我们在开发和正式环境中需要来回更改第3方开放平台中授权回调域名。
本文主要讲解如何创建OAuth2授权回调中转URL。
中转URL:该URL主要将第3方平台OAuth2用户授权重定向时传递的code参数以及其他Query参数一起传递给应用的最终回调URL上。因此我们只需要将第3方开放平台中授权回调域名固定为该URL所在域名即可。
HTML + JS实现
思路:创建一个纯静态HTML文件,该URL接收一个redirect_uri参数指向应用最终回调URL,通过JavaScript获取redirect_uri值作为最终回调URL并获取其他参数拼接到最终回调URL上,最后重定向到最终回调URL上。
优势:1). 无需后端服务器进行解析,系统开销小 2). 可以直接将该HTML文件上传到外部平台,对外部平台无任何破坏性
调用方式:
假设中转URL为: https://codebays.com/oauth.html,应用最终回调URL为:https://codebays.com/oauth2/callback。
第3方开放平台授权回调域名固定为codebays.com即可。
构建OAuth2用户授权URL时,参数redirect_uri的值填入:
https://codebays.com/oauth.html?redirect_uri=urlencode(https://codebays.com/oauth2/callback)
代码如下:
Nginx + Lua 实现
思路:Nginx安装LuaJIT扩展(可以直接安装Openresty),Nginx配置文件中配置一个虚拟location(指向路径/oauth.html),虚拟location使用lua脚本来实现rewrite。
优势:1). Nginx+Lua直接解析并重定向,系统开销小
Nginx配置参数如下:
oauth.lua代码如下:
Openresty是一个基于Nginx和Lua的高性能Web平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
【web说】不局限于web知识分享。