分类存档: Management

基于钉钉 + Virtual-LDAP + KeyCloak 的内网统一认证系统

0. 架构

基于钉钉的内网统一认证

1. 背景

最近公司内网的各种系统部署得越来越多,每个系统都有自己的认证方式和账号体系,这导致大家在每个地方都要去注册一个账号,并且不利于公司统一管理密码安全策略,例如密码到期策略、密码复杂度策略以及强制二次验证等。

以及对于一部分短平快的内网应用来说,我们并没有时间去为它开发一套用户体系,这个时候还是希望能有一个统一的前端反向代理来处理用户认证这个流程。

为此,我就去寻找了一些解决方案,并且为了解决开源系统并不能对接外部用户系统的问题,开发了一个 Node.JS Package(Virtual-LDAP)来提供 LDAP 能力。

2. 问题

虽然总的需求是一个很简单的功能,但是这其中还是有很多细节的问题需要考虑。

认证方式

对于有一些开源系统,它本身是支持 OAuth 来进行用户认证的,这个时候只需要去选择一个支持 OAuth 的用户管理系统就可以了,甚至基于开源库自己去开发一个也并不困难。但是对于某一些开源系统来说,它并没有提供 OAuth 认证接入的支持,只提供了 LDAP 接入。

例如最近我们引入了 Metabase 作为面向运营的快速 BI 分析工具,但是它除了可以接入 Google 账号作为认证方式,就只能接受 LDAP 作为认证方式了。这个时候就得去寻找一个认证系统,同时能支持 OAuth 以及 LDAP。

用户体系

引入用户管理系统之后,还有另外一个问题需要考虑,就是现在员工的用户体系需要去管理。对于一个小公司来说,目前并没有一个统一的工具去同时管理员工的各种信息以及状态。

但是目前公司已经引入钉钉作为公司的交流沟通工具,以及作为各种流程的审批处理系统,HR 也会在钉钉上去管理所有员工的状态,以及员工的组织架构。

因此,这个用户管理系统最好需要能支持同步钉钉中的用户体系,这样就不需要额外的人力去维护用户管理系统,以及在有员工状态变更的时候,能及时同步,避免出现授权外的访问。

数据同步

有了 OAuth,有了 LDAP,还有了钉钉这个数据源,因此就需要处理好各个 Provider 之间的数据同步问题,避免人工去维护各个系统里面的用户数据,做到以钉钉的数据为基础,用户管理系统提供能力,做到各个系统各个认证方式得到的用户数据都是一致的。

以及,对于 …

阅读全文 »

Snow Leopard Server 上配置 Gitosis 笔记

为了迁移项目 Git 仓库到 Mini Server 上,需要在 Snow Leopard Server 上配置一下 Gitosis,但是 Mac OS X 和 Linux 不太一样,有些地方需要特殊处理一下。

安装 Gitosis

Gitosis 的安装就不多说,在参考文档2中有。

添加 Git 用户组及用户

添加用户可以用参考文档1中的方法来创建,没有尝试直接用 OSX 的用户管理来创建是否可用。

# 这里的用户组和用户ID 用 401,但是实际用时需要根据服务器上的情况来创建
# 我在使用时 401 这个 gid 就已经被占用了,可以使用以下两个命令看看要用的
# ID 是否已经被用了。
sudo dscl . list /Users uid
sudo dscl . list 


阅读全文 »

Subversion 配置笔记

在决定转向SVN之后,就去下了个Subversion 1.4.6装上,但是默认的情况下,SVN并不像CVSNT那样提供一下基于网络的访问接口,因此在一开始,我只能用TortoiseSVN使用file:///协议来访问版本库。

这样终究不是个办法,因此去网上找了找,发现SVN本身也提供将SVN安装成服务的方法,只要自己添加一下就行了。使用以下命令:

sc create svnserve binpath= "c:\svnserve\svnserve.exe --service
--root c:\repos" displayname= "Subversion" depend= tcpip start= auto

注意,如果你是在Vista下面的话,需要使用管理员权限来添加服务。还有一点就是,在输入命令的时候,属性名称后面跟着=,不能有空格,但是=与后面的值之间必须有一个空格。

配置之后就可以用svn://协议来访问版本库了。

配置网络访问之后,还需要设置一下访问权限,这个在版本库conf目录里的svnserve.conf里配置。

找到 [general] 段,可以从注释里看到配置匿名访问、密码数据库等等选项。其中 anon-access 是用来设定版本库的匿名访问权限,auth-access 是用来设定登录用户的访问权限,password-db 是用来设定用户密码数据库,一般取默认 passwd 就行了,realm 是用来设定版本库的域,如果两个版本库的的域一样,那么它们就会使用同一个用户密码数据库。

用户权限有 none、read、write 三种,我的配置如下:

[general]
anon-access = none
auth-access = write
password-db = passwd
realm = my subversion



阅读全文 »