1. 所有的用户都采用公司邮箱和邮箱密码来登录系统,一旦用户删除后,删除邮箱后保证用户不能再登录到各个系统。

2. 基于 Linux PAM 机制

3. 所有的应用都在Nginx 后面,Nginx 负责与PAM系统的交互。

4. 各个系统的应用程序应该不关心用户认证,可以通过HTTP Header获得当前登录的用户。

具体步骤

1. 根据认证应用系统编写认证的URL请求

比如 http://xxxxx/login.jsp?user=xxxx&password=xxxx 

认证成功返回 0,不成功返回 -1

2. 采用PAM_SCRIPT 来整合这个URL认证

注意:不要用 yum install pam_script

1) 下载并编译 PAM_SCRIPT 模块

 下载地址:[https://github.com/jeroennijhof/pam_script](https://github.com/jeroennijhof/pam_script)

2) 编译步骤

 aclocal

  autoheader

  libtoolize

  automake -a

  autoconf

  ./configure

  make

 将编译好的**pam_script.so** 复制到 lib 目录,我的是 ./lib/x86_64-linux-gnu/security/pam_script.so

3) 按照文档建立相应的脚本

pam_script_acct
pam_script_auth
pam_script_passwd
pam_script_ses_close
pam_script_ses_open

pam_script_auth 用于认证,与认证系统对接,脚本如下:

[plain] view plain copy

#!/bin/bash
URL="https://cas-server.360orz.com/cas-server/cplus/public/http-checkUser?name=$PAM_USER&password=$PAM_AUTHTOK&token=xxxx";
RET=curl -k $URL

#echo “———————–”

#echo $RET
if [ “$RET” = “0” ]; then
exit 0;
fi
exit 1;

[plain] view plain copy

3. 在PAM机制里增加认证

/etc/pam.d 下新建一个 neulion 的认证模块

内容如下:

[plain] view plain copy

  1. auth required pam_script.so dir=/usr/bin/neulion <<<<目录下就是pam_script 的几个脚本
  2. account required pam_permit.so

4. 写一个test.sh 进行验证

PAM_USER=neil.mao
PAM_AUTHTOK=xxxxxxx
/usr/bin/neulion/pam_script_auth

5. 下载 Nginx 的 PAM 模块

[http://web.iti.upv.es/~sto/nginx/](http://web.iti.upv.es/~sto/nginx/)

6. 下载Nginx

  wget http://nginx.org/download/nginx-1.4.4.tar.gz

编译脚本类似:

./configure (这里是其他的配置xxxx)–add-module=/root/ngx_http_auth_pam_module-1.3

##

7 . 整合测试

nginx 的conf 加入

location / {

        auth_pam      "Please specify loginId"; <<<登录提示
        auth_pam_service_name "neulion"; <<<< 认证模块,根据上面配置的
        auth_pam_set_pam_env  on;
        proxy_pass   http://10.7.1.70:80;  <<<<<<<<<  后端的系统系统
        client_max_body_size 1000m;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Remote-User $remote_user;  <<<<<<<< 登录的用户
   }

然后浏览器访问: 输入用户名和密码,认证通过后,就可以访问应用了。