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)

代码如下:


HTML获取session_HTML获取session


Nginx + Lua 实现

思路:Nginx安装LuaJIT扩展(可以直接安装Openresty),Nginx配置文件中配置一个虚拟location(指向路径/oauth.html),虚拟location使用lua脚本来实现rewrite。

优势:1). Nginx+Lua直接解析并重定向,系统开销小

Nginx配置参数如下:


HTML获取session_html获取url后面的参数_02


oauth.lua代码如下:


HTML获取session_Nginx_03


Openresty是一个基于Nginx和Lua的高性能Web平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

【web说】不局限于web知识分享。