Gem 简单的 API 控制访问 Rack Middleware

yanguango · 2015年06月29日 · 最后由 vkill 回复于 2015年07月22日 · 2356 次阅读

最近做的项目需要对 API 的访问做限制,所以我把这一部分抽象到一个 Rack Middleware,这样就能在所有兼容 Rack 的框架上使用,比如 Sinatra,Grape。 现在 Gem 还在开发阶段,没有测试,不保障 bug-free,而且实现的功能非常基本。希望有相同需求的同学可以提提宝贵意见,以及我没有考虑到的常见需求,不断完善这个 Gem。

https://github.com/yanguango/rack-authorize

👍 代码非常清晰直观。

大概看了下,用法也比较符合常用 gem 的规范,文档比较赞,加油,已经 star,具体内容还得有机会在项目中使用到才能评价,反正赞啦。

#1 楼 @lgn21st 吕哥,多谢 review,哈哈

#2 楼 @martin91 我也会在项目中不断改进功能

第一,我觉得 Rack middleware 更多是用于底层或很通用的逻辑,业务逻辑放在 controller 层面感觉更合适。 第二,use middleware 是在 Rails instance 启动的时候调用,而你的逻辑需要在 controller instance 启动的时候检查。我想你肯定做过检查,但我觉得这一块会潜在问题。

另外,不太明白为什么 cancan 不能用,虽然我不喜欢 cancan 而喜欢 pundit.

#5 楼 @billy 多谢你的意见。我的想法是 1. 我就是想把 api 的授权作为一个基础服务,作为 rack stack 中的一层,我在不同的 microservice 中只需指定规则就可以,不需要考虑业务逻辑。2. rack middleware 不只限制在 Rails 中使用,你说的 api 授权的逻辑应该就是在那个 middleware call 的时候检查的。最后 cancan 的问题,我刚开始研究过 cancan,发现 cancan 是在 model 上面定义规则,而 api 的授权我不需要 model,所以觉得 cancan 不适用于 api 的场景。

跟 warden 有什么区别啊?

#7 楼 @cinic 我没有用过 warden,但是我粗略看了一下,warden 做的是 authentication,而我想做的是 authorization

看了下实现,很简单清晰。

@yanguango 关于 1 "我在不同的 microservice 中只需指定规则就可以,不需要考虑业务逻辑" 我觉得这个是 api 网关该干的事情,网关来调用后面的 microservice

关于 2 和 3 在网关处集成 OAuth2 来完成认证和授权

需要 登录 后方可回复, 如果你还没有账号请 注册新账号