Noah's Blog

SkyEvent开发随笔(2)

2015-09-08

2015-09-08

转载请保留 本文来自 Noah‘sBlog

案例比较特殊,不确定能否普适,有没有错误,仅作为个人笔记记录

由于SkyEvent项目的实际需要,最近实践了一个Oauth1.0客户端,由于oauth接触少不敢妄下定论,但是应该可以适用于其他云平台访问oauth1.0的问题。

分析

VATSIM SSO基于Oauth1.0构建,创建者是K.Harden,服务于全球最大的模拟飞行组织VATSIM。

官方服务在论坛上,上面有详细的原理解释和教程(English),比较简单,很容易理解。 原理大致是向SSO服务器发送一个包含授权信息和回调地址的oauth请求,服务器返回一个token和一组用户认证秘钥,将用户认证秘钥保存在session一类的地方,然后在本地拼装一个固定的有token的GET请求的地址,将用户直接跳转过去,用户使用VATSIM账户登陆后会被服务器跳转到跳转地址,并附带一个oauth_veifer参数,再向服务器发起一个请求,包含用户认证信息和这个参数,服务器返回1次用户信息,即为登录成功。

主要问题

正式服务器需要在个人或分部的SSO面板中申请站点,审核慢的要死,DEMO服务器只能使用限定的测试账号,功能严重受限。

限定IP,IP的审核还慢的要死,我的项目出于成本和速度考虑部署在SAE上,没有固定IP,好在有个美国VPS可以当做中转。

认证方法为HMAC和RSA,切换这两种方法也要审核,RSA不能变化公钥,好麻烦的样子。。

解决方法

VATSIM提供了一些开放库供使用,包括PHP,Python等语言。 我用的是https://github.com/KHardern/VatsimSSOPHP库

干脆将所有数据封装一下部署到美国VPS上,依靠双向秘钥认证以JSON传输数据,登录的时候直接由SAE服务器跳转到VPS返回的地址

结果

测试效果不错,实际部署

…To be continued…