【问题标题】:How to improve authentication in a Perl Dancer app如何改进 Perl Dancer 应用程序中的身份验证
【发布时间】:2013-02-22 18:28:56
【问题描述】:
我正在开发一个 Perl Dancer Web 应用程序,它需要在身份验证方面完成两件事:
- 根据 Active Directory 对用户进行身份验证以访问应用程序
- 以用户身份进行身份验证以访问几个 .NET Web 服务。
该应用程序由 Apache 在 Linux 机器上作为 CGI 应用程序托管,我对 Apache 的配置没有太多控制权。
以下是当前工作应用程序的工作流程:
- 向用户显示登录页面
- 用户提交表单时,使用Authen::Simple::ActiveDirectory验证账号是否有效
- 使用Dancer::Session::Cookie(加密的cookie)存储用户的凭据
- 向用户显示搜索表单
- 当用户提交此表单时,使用Authen::NTLM 和SOAP::Lite 访问.NET 服务(类似于示例here)执行搜索
- 向用户显示结果
这里的用户凭据处理与我有关,但我通常对 Web 应用程序和身份验证不熟悉。对于小型内部应用程序,这样可以吗?如果没有,你建议我如何改进这个过程?就像我说的,上面概述的应用程序有效,但我觉得它可以/应该改进。
【问题讨论】:
标签:
web-services
perl
authentication
active-directory
dancer
【解决方案1】:
一个(部分)解决方案可能是让您的 apache 网络服务器处理
验证。您可以为此使用Kerberos。
因此,只有允许的用户才能访问您的应用程序。在那里面
case $ENV{REMOTE_USER} 包含用户名(例如 foo.bar@MY.DOMAIN.COM)。
如果您需要有关当前用户的更多信息,您可以查询您的 LDAP(包含在您的域中)。我使用普通 (LDAP) 用户来获取有关当前用户 foo.bar@MY.DOMAIN.COM 的更多信息。
我知道这只是第一部分。我没有通过 SOAP 使用/传递 Kerberos 票证的经验。但是,如果您设法处理这个问题,您就有了一个干净的 SSO 解决方案。
HTH
【解决方案2】:
我们在 Apache 配置中执行此操作。它需要类似下面的东西。您需要一个只读无密码用户才能绑定到 Active Directory。
AuthName "Active Directory"
AuthType Basic
AuthBasicProvider ldap
AuthLDAPUrl ldap://server:389/OU=COMPANY,DC=COMPANY,DC=com?sAMAccountName,mail,name,extensionAttribute2,memberOf?base?(objectClass=user)
AuthzLDAPAuthoritative on
AuthLDAPBindDN "CN=ReadOnlyUser,OU=ServiceAccounts,OU=Users,OU=XXX,OU=COMPANY,DC=COMPANY,DC=com"
AuthLDAPGroupAttributeIsDN on
require valid-user