分享一下最近的工作成果: EvaOAuth - 可能是目前最好的 PHP OAuth 库

2015-05-02 14:34:34 +08:00
 AlloVince

EvaOAuth是我很久之前的作品,也用在生产环境很久了,但是在线上调试及定位问题的时候,旧版的EvaOAuth以及现有的很多PHP库以及不能很好地解决问题,因此从实际出发,对EvaOAuth做了一次大的重构。

目前EvaOAuth可以看做是一个统一接口设计的PHP OAuth Client库,兼容OAuth1.0与OAuth2.0规范,可以通过10多行代码集成到任意项目中。新版的特性有:

项目代码托管在 https://github.com/AlloVince/EvaOAuth ,欢迎Star及Fork贡献代码。

中文文档: http://avnpc.com/pages/evaoauth

3271 次点击
所在节点    PHP
8 条回复
kn007
2015-05-02 14:35:30 +08:00
沙发,主楼的github地址貌似多了个奇怪字符
kn007
2015-05-02 14:35:59 +08:00
已星标
AlloVince
2015-05-02 14:37:15 +08:00
貌似已经无法编辑了,稍后append。

github地址是 https://github.com/AlloVince/EvaOAuth
kn007
2015-05-02 14:38:05 +08:00
嗯嗯,其实挺想说一句:PHP 是最好的语言
yangmls
2015-05-02 21:58:49 +08:00
AlloVince
2015-05-02 23:55:34 +08:00
@yangmls thephpleague的两个库我有考察过,由于两个库的工作流略有不同,如果想要集成,还需要自己写一个上层来统一,这个EvaOAuth已经做掉了。

另外在生产环境中,如果不支持完整的Log记录几乎是无法排查故障的,这一点上我目前还没有看到其他PHP OAuth库考虑进去,其实也是我自己造轮子的初衷。

其他不足的地方可以提出来,我还会不断完善
yangmls
2015-05-03 00:18:34 +08:00
@AlloVince 粗略看了一下,不足之处还是挺多的,比如 RefreshToken 好像不支持,没有看到相关的实现代码,比如 Client 里面定义了 password 验证 Eva\EvaOAuth\OAuth2\GrantStrategy\Password,但是并没有这个类。。。这个 unit test 是咋通过的?

log 这个,因为 OAuth 是标准,各个 OAuth 库只要作好 Exception,然后我们在外层 catch 就可以了,植入代码里面的 log 并没有必要。

把 OAuth1 和 OAuth2 分开也挺正常,毕竟连不同网站的 OAuth2 实现都有略微不同的地方,我给网站加第三方登录的时候,比较喜欢给每个网站一人一个action,然后在里面调用具体的类,以应付不同网站不太一样的地方,比如有些有refresh token,有些没有,有些fetch user info的流程不一样,有些字段不一样。
AlloVince
2015-05-03 01:01:00 +08:00
@yangmls 偷懒被发现了(・∀・),确实目前OAuth2的Grant暂时只实现了Authorization Code方式,OAuth1的加密也没有实现RSA-SHA1,这些在实际项目中很少用到的部分会在后续版本补进来。

Refresh Token部分我比较犹豫要不要作为基础功能,因为某些知名服务压根不提供refresh token。

Log部分我的初衷是想记录完整的Request和Response,比如thephpleague中,Exception仅保存了Response,这对于定位问题来说是不太够的。

https://github.com/thephpleague/oauth2-client/blob/master/src/Exception/IDPException.php

OAuth1.0和2.0,在我的项目中一般都会将两个版本的第三方用户信息都存在一个数据表,所以整合流程是必要的,如果数据表设计是分开的那么流程分开也OK,不过感觉分开做的工作量更大。

谢谢意见

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/187934

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX