bianbian coding life

便便代码人生: 关注技术, 翻译文档, 偶尔动动手

[原] Shibboleth 2.0 Identity Provider (IdP) LDAP认证配置指南

Posted by bianbian on 2008-05-14 01:15


本文Tags: , , , ,

首先佩服老外:1)把简单的东西搞得很复杂 2)很会创造标准和协议
这次遇到的Shibboleth就是这么个东西,看了两天英文,对人为复杂、创造协议痛恨中。简单写个配置指南,给其他人做个参考,少走弯路。

注意:
1) 系统时间必须设置正确
2) apache 需要 mod_ssl mod_proxy_ajp,假设安装在 /etc/httpd
3) 必须使用 tomcat-5.5.x+,假设安装在 /opt/apache-tomcat-5.5.26
4) 如果需要改变安装目录重新安装,必须退到解压那步(否则很多和目录有关的代码不会重新编译,导致严重错误–啊!我整整一天的痛苦啊!)

# 取消tomcat的AJP身份认证
vi /opt/apache-tomcat-5.5.26/conf/server.xml
# 找到 Define an AJP 1.3 Connector 那,初始为:

  1. <Connector port="8009" 
  2.                enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

# 修改为(端口改变没有特殊目的,只是我系统上跑了好几个tomcat,防止冲突):

  1. <Connector port="8019" 
  2.                enableLookups="false" redirectPort="8443" protocol="AJP/1.3"
  3.                request.tomcatAuthentication="false" address="127.0.0.1" />

# apache httpd 配置AJP反向代理
vi /etc/httpd/conf.d/proxy_ajp.conf
# 添加:
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ProxyPass /idp/ ajp://localhost:8019/idp/

# 安装Shibboleth 2.0 Identity Provider (IdP)
unzip shibboleth-idp-2.0.0-bin.zip
cd identityprovider
cp endorsed/*.jar /opt/apache-tomcat-5.5.26/common/endorsed/
sh ant.sh install
# 提示是否新安装,yes
# 提示选择安装目录,/opt/idp
# 提示hostname,根据实际填写
# 提示加密密匙,随便写

# 部署war
vi /opt/apache-tomcat-5.5.26/conf/Catalina/localhost/idp.xml
# 内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context docBase="/opt/idp/war/idp.war"
  3.          privileged="true"
  4.          antiResourceLocking="false"
  5.          antiJARLocking="false"
  6.          unpackWAR="false" />

# 测试:应该能看到“ok”
httpd -k restart
links http://127.0.0.1/idp/profile/Status

# 配置用户名/密码认证方式
vi /opt/idp/conf/handler.xml
# 找到 Login Handlers 那,注释掉”RemoteUser”认证方式,启用UsernamePassword方式。修改为:

  1. <LoginHandler xsi:type="UsernamePassword" 
  2.                   jaasConfigurationLocation="file:///opt/idp/conf/login.config">
  3.         <AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</AuthenticationMethod>
  4.         <AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</AuthenticationMethod>
  5.     </LoginHandler>

# 配置LDAP连接方式
vi /opt/idp/conf/login.config

  1. ShibUserPassAuth {
  2.    edu.vt.middleware.ldap.jaas.LdapLoginModule required
  3.       host="ldap.bianbian.org"
  4.       base="dc=test,dc=bianbian,dc=org"
  5.       serviceUser="cn=Directory Manager"
  6.       serviceCredential="11111111"
  7.       subtreeSearch="true"
  8.       userField="uid";
  9. };

# 配置SP(关键!加入SP的Metadata描述)
vi /opt/idp/conf/relying-party.xml
# 找到 MetadataProvider 那,注意修改id和backingFile要不同
# 假设某通过apache模块工作的SP位于 http://bianbian.org/

  1. <MetadataProvider id="URLMD" xsi:type="FileBackedHTTPMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata"
  2.                metadataURL="http://bianbian.org/Shibboleth.sso/Metadata" 
  3.                backingFile="/opt/idp/metadata/bianbian.org-metadata.xml" />

# 配置传递属性,这跟每个SP有关,要与SP联合配置

标签: , , , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Java, Technology | No Comments »

[原]apache模块的编写实例 (反向透明代理实现方式之一)

Posted by bianbian on 2006-10-30 07:45


本文Tags: , ,

除了用端口映射(当然,要在转发数据包前传递客户端IP地址给内网服务器)来实现反向透明代理以外,利用apache的mod_proxy也是一种办法。而后一种办法更方便的地方是一个80端口可以给很多域名使用(即虚拟主机)——当然前一种也是可以,只要根据不同域名把数据包转发到不同内网服务器而已,我只是懒得写而已;因为工作量显然是直接用apache来得少。。。。
我贴出用后一种办法实现以前lilybbs.net公网代理的代码;之所以要自己写apache的模块,是因为直接用mod_proxy是不能传递客户端的IP地址给真正的内网服务器的。我原本打算是插入自定义的一个HTTP头来实现IP传递,这样一般是没有问题;但是当客户端本身访问网络经过Squid代理时,Squid会删除掉非标准的HTTP头,真是FT。所以我采用的方法是通过”Accept-Language”头传递客户端IP地址,”Accept-Language”是用来标示客户端接受的页面语言顺序(中文?英文?之类),在非国际化的网站中并没有很大的用处。
apache的模块编写其实很简单,大部分都是架子工程,直接贴过来就可以。
代码如下(代码经过lilybbs.net公网访问测试OK,不过现在学校网络中心停止了lilybbs.net的公网出口)。

  1. /*
  2. apache 2.x 模块
  3. 所有http请求的header发送ip,以实现代理
  4. 如需使用 LilybbsipEnable 设为 on 即可(需要和mod_proxy一起使用)
  5.  
  6. 编译:
  7. /home/apache2/bin/apxs -i -a -c mod_lilybbsip.c
  8.  
  9. 参考:
  10. http://modules.apache.org/
  11.  
  12. 作者:
  13. Net@Lilybbs, 2006-3-26 17:38
  14. http://bianbian.org
  15. */
  16.  
  17. #include "httpd.h"
  18. #include "http_config.h"
  19. #include "http_core.h"
  20. #include "http_log.h"
  21. #include "http_protocol.h"
  22. #include "http_vhost.h"
  23. #include "apr_strings.h"
  24.  
  25. module AP_MODULE_DECLARE_DATA lilybbsip_module;
  26.  
  27.  
  28. typedef struct {
  29.     int enable;
  30. } lilybbsip_server_cfg;
  31.  
  32. static void *lilybbsip_create_server_cfg(apr_pool_t *p, server_rec *s) {
  33.     lilybbsip_server_cfg *cfg = (lilybbsip_server_cfg *)apr_pcalloc(p, sizeof(lilybbsip_server_cfg));
  34.     if (!cfg)
  35.         return NULL;
  36.  
  37.     cfg->enable = 0;
  38.  
  39.     return (void *)cfg;
  40. }
  41.  
  42.  
  43. static const char *lilybbsip_enable(cmd_parms *cmd, void *dummy, int flag) {
  44.     lilybbsip_server_cfg *cfg = (lilybbsip_server_cfg *)ap_get_module_config(cmd->server->module_config, &lilybbsip_module);
  45.     cfg->enable = flag;
  46.     return NULL;
  47. }
  48.  
  49. static const command_rec lilybbsip_cmds[] =
  50. {
  51.     AP_INIT_FLAG(
  52.                  "LilybbsipEnable",
  53.                  lilybbsip_enable,
  54.                  NULL,
  55.                  RSRC_CONF,
  56.                  "Enable mod_lilybbsip"
  57.                  ),
  58.     { NULL }
  59. };
  60.  
  61. static int ip_lilybbsing_handler(request_rec *r) {
  62.  
  63.     lilybbsip_server_cfg *cfg = (lilybbsip_server_cfg *)ap_get_module_config(r->server->module_config, &lilybbsip_module);
  64.     if (!cfg->enable)
  65.         return DECLINED;
  66.    
  67.     //通过Accept-Language传递IP
  68.     apr_table_set(r->headers_in, "Accept-Language", r->connection->remote_ip);
  69.  
  70.     return DECLINED;
  71. }
  72.  
  73.  
  74. static void register_hooks(apr_pool_t *p)
  75. {
  76.     ap_hook_post_read_request(ip_lilybbsing_handler, NULL, NULL, APR_HOOK_MIDDLE);
  77. }
  78.  
  79. module AP_MODULE_DECLARE_DATA lilybbsip_module =
  80. {
  81.     STANDARD20_MODULE_STUFF,
  82.     NULL,
  83.     NULL,
  84.     lilybbsip_create_server_cfg,
  85.     NULL,
  86.     lilybbsip_cmds,
  87.     register_hooks,
  88. };

使用的时候在vhost(虚拟主机)内设定:

LilybbsipEnable On
ProxyRequests Off
ProxyPass / http://bbs.nju.edu.cn

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in C/C++, Linux, Technology | 2 Comments »