小编drd*_*man的帖子

多个站点的透明用户会话(单点登录+单点登录)

我在不同领域的几个网站:example.com,example.org,mail.example.compassport.example.org.所有网站都具有共同的外观,应该共享相同的用户群.

在这种极端情况下,我仍然希望所有站点透明地(尽可能地)共享具有以下关键属性的用户会话:

  1. 单点登录.当用户passport.example.org登录并访问任何其他站点时 - 他应该被视为已登录.

    登录用户$username在站点标题和不同的导航菜单中获得"Hello ",问候语,列出他们有权访问的服务.如果他没有登录,而不是打招呼有一个"登录"链接,指向passport.example.org/signon.

    可信域列表是已知的,因此使用OpenID或某些homebrewn轻量级协议实现起来相当简单.当用户第一次访问该站点时,我将其重定向到特殊身份验证端点passport.example.org,然后以静默方式将其重定向回来,其中包含身份信息(或"未签名"匿名身份).对于大多数浏览器,这是完全透明的 显然,我正在使用nonce值来对抗重定向循环.

  2. 单一签收.当用户下次访问任何网站时点击任何网站标题中的"注销"时,他应被视为"未登录".

    OpenID不是为此而设计的.我当前的想法(我已经有一个部分工作的实现)是在DB中发送不是用户身份,而是"全局"会话令牌和共享全局会话表(global_session_token↔用户关系).

  3. 机器人和无cookie用户支持.站点具有公共区域,用户代理可以访问这些区域而无需任何cookie支持.

    因此,我在(1)中提到的重定向成为一个问题,因为对于每个单页请求,我最终都会将用户代理抛给auth端点并返回.这不仅会使机器人感到困惑,而且会很快污染我的会话数据库.我绝对不想显示"嘿,你没有启用cookie,走开!"页面,这是非常粗鲁和令人失望的.虽然我需要cookie支持登录,但我希望用户可以自由阅读网站的内容等等 - 没有任何限制.

    而且我明确地希望把URL中的会话ID,除了我刚才提到了一些透明的跨域重定向.我认为这样做是一个安全问题,通常只是一件坏事.

    在这里,我几乎没有想法.

好吧,我知道这很难,但谷歌实际上(这是否在某种程度上google.com, google.很多-的-通用顶级域名,gmail.com等等),对不对?所以这应该是可能的.

我要感谢协议描述的想法(这是最好的)或系统的链接(要么是代码阅读,要么是直播现场观看和学习)已经成功地实现了这样的事情.

总结一下:几个域没有共同的根,共享用户群,单点登录,单点注销,匿名浏览不需要cookie.

所有站点都在同一个网络上(但在不同的服务器上)并且部分共享同一个PostgreSQL数据库(在同一个数据库的不同方案中).大多数站点都是用Python/Django编写的,但其中一些是使用PHP和Ruby on Rails.虽然我正在考虑与框架和语言无关的东西,但我很感激指向任何实现.即使我不能使用它们,如果我能理解它是如何完成的,那么也许我能够实现类似的东西.

authentication session single-sign-on

35
推荐指数
2
解决办法
2万
查看次数

如何使用mount(8)和fstab注册FUSE文件系统类型?

我已经编写了一个基于FUSE的小文件系统,现在唯一缺少的是我想用fstab(5)注册它以在系统启动时自动挂载它和/或用它手动挂载它mount /srv/virtual-db.我怎样才能做到这一点?

我知道,我可以/usr/bin/vdbfs.py /srv/virtual-db从一些初始化脚本运行,但这并不完美.

我很抱歉,因为这可能不是一个编程问题,但它是高度相关的,因为打包和部署仍然是程序员的工作.

linux filesystems mount gnu fuse

33
推荐指数
3
解决办法
2万
查看次数

没有Apache/Nginx/Lighttpd /等的本地调试的小型PHP"独立"服务器(或框架)

manage.py runserver在Django或ruby script/server在Ruby on Rails的-那些熟悉这些框架之一,应该已经得到了我正在寻找的想法.它们运行微小的"独立"Web服务器,完全足以在本地调试应用程序,而无需其他软件(Apache/Nginx/Lighttpd /等).

我想知道是否有这样的工具的PHP实现,或者,某些PHP框架可能有这样的功能?当然,我可以打包预先构建的预配置静态nginx可执行文件,但这不是很好,当然也不是跨平台的.使用PHP编写的独立调试Web服务器将使程序包自包含.

即我想键入类似的东西php tools/runserver.php,指向浏览器http://localhost:8000/并查看该站点并运行,准备调试.

我的Google-fu让我失望,但我强烈怀疑已经有这样的项目了.

php debugging webserver

18
推荐指数
1
解决办法
7835
查看次数

将etcd集群自动配置为Docker swarm服务

我想找到一种方法将etcd集群部署为Docker Swarm服务,该服务将自动配置而无需任何交互.基本上,我想到了这个命令的精神:

docker service create --name etcd --replicas 3 my-custom-image/etcd
Run Code Online (Sandbox Code Playgroud)

我假设覆盖网络配置为安全并提供加密和身份验证,所以我相信我不需要TLS,甚至不需要--auto-tls.当这可以在另一层上解决时,不希望额外的头痛找到提供证书的方法.

我需要--name为每个实例都有一个唯一的,但是我可以从一个可以使用的入口点脚本中获得它export ETCD_NAME=$(hostname --short).

问题是,我坚持初始配置.根据聚类指南,有三个选项,但似乎都不适合:

  • DNS发现场景最接近我正在寻找的,但Docker 目前不支持DNS SRV记录发现.我可以查找etcd,我将获得节点容器的所有IP,但没有_etcd-server._tcp记录.
  • 我不能自动构建,ETCD_INITIAL_CLUSTER因为虽然我知道IP,但我不知道其他节点的名称,我不知道有任何方法可以解决这些问题.(我不打算将Docker API套接字暴露给etcd容器.)
  • 没有预先存在的etcd集群,虽然从discovery.etcd.io提供初始配置URI是一种可能的解决方法,我有兴趣不这样做.我的目标是"只需从这部署一个堆栈docker-compose.yml,它就会自动做正确的事情,没有问题就是这样".

有什么技巧可以拉吗?

deployment configuration docker etcd docker-swarm-mode

18
推荐指数
1
解决办法
1092
查看次数

如何在DRF文档中描述参数

我正在使用Django REST Framework v3.6内置交互式文档django_rest_framework.documentation(不是 django-rest-swagger).

基本上,我正在遵循官方文档并在我的URLset配置中使用它:

from rest_framework.documentation import include_docs_urls

urlpatterns = [
    url(r"^", include_docs_urls(title="My API")),
    ...
]
Run Code Online (Sandbox Code Playgroud)

一切似乎工作,我得到一个不错的交互式文档页面,但我有一个ViewSetlookup_field = "slug"一两件事有关生成的文档困扰着我:

在

我希望获得一些有用的信息,例如"一个独特的永久分配的字母数字ID"或这些行之类的东西,但找不到这些数据来自的任何文档.

有一种解决方法,但我真的不想明确定义所有架构.我想用很好的文档字符串声明我的类,并自动生成文档.我还发现了一个建议放入slug -- here goes the description文档字符串,但它似乎不起作用 - 文本只显示Markdown格式描述的其余部分.

所以......我想知道两件事:

  1. (具体问题)我在哪里填写此路径参数说明?
  2. (同一问题的更通用版本)了解如何从代码自动生成模式的最佳方法是什么?

python django documentation django-rest-framework

16
推荐指数
2
解决办法
3246
查看次数

让gcc在调试信息中放置相对文件名

我正在编译的项目使用CMake,它喜欢绝对的路径名.

当我在启用调试信息的情况下进行编译时,gcc会将这些长名称放入.debug_str部分,这对于调试是不利的.我希望在那里有一个简短的相对项目根路径名.

是否有一些选项可以告诉gcc在发出调试数据之前去除路径名的某些部分?或者,也许,有一些工具可以在已编译的二进制文件上执行此操作?

我已经尝试使用SET(CMAKE_USE_RELATIVE_PATHS ON)(这似乎是令人难以接受的开发者)的选项,但我使用的乱源生成,路径名仍未形式我想他们是.即他们./../src/mod_foo/foo.c而不是mod_foo/foo.c.

debugging gcc cmake debug-symbols

14
推荐指数
2
解决办法
6009
查看次数

从结果集中选择TOP 1

我想检索使用Union连接的查询结果集的前1个值

SELECT TOP 1 * FROM
(
    SELECT paused_time as end_time
        FROM production_time
        WHERE created_time = curdate()
    UNION 
    SELECT resumed_time as end_time
        FROM pause_timer
        WHERE created_time = curdate()
    UNION
    SELECT end_time as end_time
        FROM timer_idle
        WHERE created_time = curdate()
) as end_time
ORDER BY end_time DESC 
Run Code Online (Sandbox Code Playgroud)

但无法获得预期的结果.

mysql sql

11
推荐指数
1
解决办法
6万
查看次数

在Django中,如何实现事务的可重复读取?

我有一个函数,它在同一个数据集上执行多个查询,我想确保所有查询都能看到完全相同的数据.

就SQL而言,这意味着支持它的数据库的REPEATABLE READ隔离级别.如果数据库不具备,我不介意更高级别甚至完全锁定.

据我所知,情况并非如此.即如果我在一个Python shell中运行类似这样的代码:

with transaction.atomic():
    for t in range(0, 60):
        print("{0}: {1}".format(t, MyModel.objects.count()))
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

一旦我MyModel.objects.create(...)在另一个中,运行循环看到的值立即增加.这正是我想要避免的.进一步的测试显示行为符合READ COMMITTED级别,这对我的口味来说太宽松了.

我还想强调一点,我想要更严格的隔离级别只针对单个函数,而不是整个项目.

我最好的选择是什么?

在我的特殊情况下,我唯一关心的数据库是PostgreSQL 9.3+,但我也希望与SQLite3有一些兼容性,在这种情况下即使完全锁定整个数据库也没关系.然而,显然,解决方案越普遍,它就越优选.

python django transactions transaction-isolation isolation-level

10
推荐指数
1
解决办法
4700
查看次数

如何创建正则表达式以接受不超过10位数?

如何创建正则表达式以接受不超过10位数?

谢谢

regex validation

9
推荐指数
3
解决办法
2万
查看次数

有哪些方法可以在debian/control中定义分组条件依赖项?

我正在对一个Python包进行debianization,它有一些奇怪的依赖.它要么:

  • 依赖于取决于 python2.7
  • 取决于python2.6python-ordereddict(我ordereddict在PyPI上的自建包)

例如,我setup.py自己:

deps = ["Flask >=0.8"]
if not hasattr(collections, "OrderedDict"): # Python 2.6
    deps.append("ordereddict")

setup(
    …
    install_requires=deps,
    …
)
Run Code Online (Sandbox Code Playgroud)

我没有在Debian包装文档中找到任何关于此事的内容.突然之间,我试过写作

Depends: ..., python2.7 | (python2.6, python-ordereddict)
Run Code Online (Sandbox Code Playgroud)

但是,毫不奇怪,这是一个错误的语法,不起作用:

dpkg-gencontrol: warning: can't parse dependency (python2.6
Run Code Online (Sandbox Code Playgroud)

我正在使用dh_python2并${python:Depends}提供非常不合理的列表

Depends: python2.7 | python2.6, python (>= 2.7.1-0ubuntu2),
    python (<< 2.8), python-flask, python-ordereddict
Run Code Online (Sandbox Code Playgroud)

有了这样的依赖关系列表,它会要求python-ordereddict进行python2.7,不存在.显然我无法补丁python2.7-minimalProvides: python-ordereddict(就像它完成的那样python-argparse).

关于如何正确打包这样的库的任何建议,好吗?

python debian packaging dpkg python-2.x

9
推荐指数
1
解决办法
865
查看次数