0xasahi / neogroup

Donation: https://ko-fi.com/neogroup
https://neogrp.club/
MIT License
12 stars 5 forks source link

是不是保持redirect_uri来源一致比较好? #10

Closed OmmyZhang closed 1 year ago

OmmyZhang commented 1 year ago

OAuth2认证登录流程中用到的redirect_uri需要和创建app时的保持一致(准确说是包含),但是目前neogroup中两者是不同的来源。

前者来自请求的host

https://github.com/0xasahi/neogroup/blob/b9a63b44748a3fccc1119df1e1082e4b8a9df1bb/mastodon/api.py#L353

https://github.com/0xasahi/neogroup/blob/b9a63b44748a3fccc1119df1e1082e4b8a9df1bb/mastodon/api.py#L377-L379

后者来自settings中的固定值

https://github.com/0xasahi/neogroup/blob/b9a63b44748a3fccc1119df1e1082e4b8a9df1bb/mastodon/api.py#L147

这种不一致增加了不必要的复杂性。我遇到的具体情况是,第一次跑时不知道要带环境变量APP_URL,于是登录过程中,创建app时redirect_uris设置成了默认的 https://neogrp.club ,而登录时redirect_uri是基于浏览器中的访问地址( http://neogrp.localhost:8000 ),导致“无效的回调地址”。由于可见的网址中redirect_uri是“正确”的,很难定位问题,最后只有上mastodon的服务器查表才发现原因(mastodon和pleroma的ctl工具都没有提供查看app的功能)。

此外,请求中的host头本身也不算很稳定的来源。

我建议统一用settings中配置的地址。

OmmyZhang commented 1 year ago

https://github.com/0xasahi/neogroup/pull/3#discussion_r1107968165 这里有看到相关讨论,但我没太懂 “这样就只能认证 APP_WEBSITE 一个站点了”具体是指什么。按这个用法APP_WEBSITE 是neogroup服务的地址,本来也和认证地址(mastodon站点)无关,这里是用于redirect_uri参数而非oauth2 api的请求地址。

OmmyZhang commented 1 year ago

我发现 https://github.com/0xasahi/neogroup/pull/2#issue-1579775698 应该也是和我遇到的一样的问题(redirect_uri不一致导致oauth2失败)。这个是pleroma的显示问题,只要请求401了都弹个“Invalid Username/Password”。

把数据库删了重建/把这个if里面临时改成app.delete(),然后带环境变量跑: APP_URL=http://127.0.0.1:8000 python manage.py runserver 应该就可以正常授权登陆了。 cc @anig1scur

anig1scur commented 1 year ago

我发现 #2 (comment) 应该也是和我遇到的一样的问题(redirect_uri不一致导致oauth2失败)。这个是pleroma的显示问题,只要请求401了都弹个“Invalid Username/Password”。

把数据库删了重建/把这个if里面临时改成app.delete(),然后带环境变量跑: APP_URL=http://127.0.0.1:8000 python manage.py runserver 应该就可以正常授权登陆了。 cc @anig1scur

照这样本地跑起来了 👏🏻 好开发多了

0xasahi commented 1 year ago

👍,之前也是把 neodb 的代码直接拿来用了,没仔细研究,感谢PR