我一直在想怎么用一套通用的账号体系来解决一些福利被滥用的情况,现在我认为我找到了解决办法。
我始终觉得论坛现在的 0-3 级用户信任等级是一个很不错的设计,Discourse自己也这么说。
于是我写了一套标准的oauth2鉴权,让大家可以共享论坛的用户基本信息:
- id,这是一个不会改变的值。
- username,这个值是论坛用户名,它可能会改变。
- name,这个值是论坛的用户昵称。
- trust_level,0-4的数值,分别对应着0级到4级。
我想如果一个公益的网站/接口能够拿到这些数值,那么:
- 可以通过用户id进行频率限制
- 通过trust_level进行额度配给。
- 通过用户信息举报滥用。
这将是一个相当完美的解决方案。
假设现在你希望开放一个oneapi额度给佬友,但你又怕被无限薅羊毛。就可以接入这套体系,用户将使用论坛账号登录,之后oneapi可以获取用户的信息来给对应的额度/频控。
系统是标准的oauth2的code鉴权,有很多标准库可以快速方便地接入。
"client_id": "hi3geJYfTotoiR5S62u3rh4W5tSeC5UG",
"client_secret": "VMPBVoAfOB5ojkGXRDEtzvDhRLENHpaN",
"redirect_uri": "http://localhost:8181/oauth2/callback",
这里放出一套测试的接入参数。相关端点为:
authorize
端点:https://connect.linux.do/oauth2/authorize
token
端点:https://connect.linux.do/oauth2/token
- 用户信息 端点:
https://connect.linux.do/api/user
比如以上测试client,我们可以使用:
https://connect.linux.do/oauth2/authorize?response_type=code&client_id=hi3geJYfTotoiR5S62u3rh4W5tSeC5UG&state=ttt1
拉起授权登录。如果尚未登录,会跳转论坛登录。已登录的情况会出现是否授权的确认。
你们可以拿一些oauth2 client工具试试。将会获得类似的以下数据:
{
"id": 1,
"username": "neo",
"name": "Neo",
"active": true,
"trust_level": 4,
"silenced": false
}
目前系统虽然实现了完整的oauth2 code方式鉴权,不过界面等各种配套还比较简陋,我会不断完善。来一起打造一个和谐的共享方案吧。