安全地将OAuth响应重定向到已知客户端。
oauth_redirect的Python项目详细描述
说明
在oauth工作流期间,由redirect-uri定义的web服务器接收 最终用户授权的结果。
此重定向uri通常是白名单uri,以避免仿冒攻击。
不幸的是,这使得很难将oauth集成客户机写入 域事先未知的API。
面对这种情况,我们编写此服务器是为了移动 可以从OAuth提供程序接收OAuth握手结果的用户 给中间人。
工作原理
使用oauth_重定向oauth工作流的工作方式如下:
- OAuth_重定向服务器在受TLS保护的站点上运行。例如: https://oauth.seantis.ch。
- OAuth提供程序配置为允许重定向到 https://oauth.seantis.ch/redirect。
- 想要获得授权的客户在 OAuth_使用机密身份验证代码重定向服务器。
- 最终用户将看到oauth授权站点,其中 将“uri集”重定向到https://oauth.seantis.ch/redirect。
- 结果被发送到oauth_重定向服务器,该服务器将转发/代理 向客户端发出的请求,前提是且仅当客户端已注册 在之前,来自oauth提供程序的请求包含一个 效果。
方法
POST /register/<authentication code>
客户/授权寻求者用于注册自己。客户是 要求在注册消息中包含机密身份验证代码。
post请求的主体是json,格式如下:
{ 'url': "The url that handles the forwarded OAuth response.", 'method': "The method with which the url should be called (get, put or post).", 'success_url': "The url the server redirects to if the handler url returns a 2XX code.", 'error_url': "The url the server redirects to if the handler url returns a non-2XX code.", 'ttl': "The optional time to live in seconds (defaults to 3600 seconds)", 'secret': "A client-specific secret that should be used authenticate the forwarded request. If the request does not contain this secret, someone other than oauth_redirect has sent it.", }
返回OAuth提供程序需要传递的令牌:
{ 'token': "..." }
(GET|POST) /redirect
端点通过重定向uri与oauth提供程序通信。到 验证来自OAuth提供程序的请求必须包含 由/register/<authentication code>给定的令牌。
通常,oauth提供程序提供某种类型的值,这些值可以从 客户端到重定向uri。此值可用于携带令牌 返回到OAuth_重定向服务器。
如果没有这样的值,令牌也可以通过url传递,使用query 参数(即https://oauth.seantis.ch/redirect?token=…)。
任何值都可以,json主体中的值、formdata值或查询 参数。
如果重定向请求被接受,它将被代理到已注册的URL。这个 ^ {tt4}$请求的结果是代理URL的结果。
如果请求被接受,它将被删除。
展开
服务器是使用aiohttp实现的。 它至少需要Python3.5。
虽然可以在oauth_重定向上实现tls支持,但是 建议您将它放在一个合适的web代理后面,比如nginx/apache。
要运行服务器,请运行:
oauth-redirect --host localhost --port 8080 --database registered --auth <your custom auth code>
运行测试
安装tox并运行它:
pip install tox tox
将测试限制为特定的python版本:
tox -e py27
许可证
OAuth_重定向在GPLv2下发布
更改日志
0.3.0(2017-05-24)
- 添加定义成功和错误URL的功能。 [资源]
0.2.0(2017-05-24)
- 添加定义重定向目标所使用的http方法的能力 应该被叫来。 [资源]
- 为重定向视图处理程序添加对get和post的支持。 [资源]
0.1.0(2017-05-23)
- 初次发布。 [资源]