0

我们一直在努力从 Windows 2003 Server (ColdFusion 8) 升级到带有 ColdFusion 10 的 Windows 2008。我们终于有了正确的设置来处理和处理我们所有的 ColdFusion 代码,具有自定义错误处理程序,并且 SSL 按预期运行。但是,当我们开始让一些用户测试不同的应用程序时,我们发现没有域用户可以登录网站,除非他们是本地计算机管理员组的成员。我们有另一个运行 .NET 并正确验证用户的 Windows 2008 Server。我彻底比较了设置,它们是相同的。这是它的设置方式:

  • ColdFusion 服务:所有服务 (5) 都在本地系统下运行,但 ColdFusion 应用程序服务器除外,它在域帐户下运行。
  • IIS:我们有 1 个活动网站(主网站)在它自己的应用程序池集成 .NET 4.0 上运行,作为 LocalSystem 运行。
  • 身份验证:匿名有效,匿名帐户必须是应用程序池标识,否则不会显示任何内容。配置了基本认证,配置了默认域。

感谢您提供任何和所有帮助,因为我们已经为此工作了几个月,并认为迁移已经准备就绪。我的团队中没有人是安装 ColdFusion 或 IIS 7.5 的专家。

4

2 回答 2

1

经过一番折腾,我在这里找到了答案:在 IIS 7.5 上使用 Windows 身份验证的 ColdFusion 9 的正确权限是什么

我需要授予域用户(这只是一个非常大的 A/D 组)对 CF10 安装位置下的配置文件夹的只读访问权限。从那时起,它工作得很好!

于 2013-06-08T03:07:49.313 回答
0

如果您也对相当健壮的解决方案感兴趣,这里有一个您可以调用的示例组件 (CFC),它还可以清除可能的注入字符。多年来,我们一直在改进它以进行身份​​验证,因此它经过了相当多的战斗测试。

<cfcomponent output="false">

<cffunction access="public" name="init" output="FALSE" returntype="any" hint="This is the pseudo constructor that allows us to play little object games." >

    <cfset variables.ldapserver = application.yoursiteLDAP.server />
    <cfset variables.ldapuser = application.yoursiteLDAP.user />
    <cfset variables.ldappassword = application.yoursiteLDAP.password />
    <cfset variables.ldaptimeout = application.yoursiteLDAP.timeout />
    <cfset variables.ldapsecuremode = application.yoursiteLDAP.securemode />
    <cfset variables.port = application.yoursiteLDAP.port />

    <cfreturn This />
</cffunction>

<cffunction name="authenticate" access="public" output="false" returntype="struct" hint="">
    <cfargument name="username" type="string">
    <cfargument name="password" type="string">

    <cfset var returnData = StructNew() />
    <cfset var queryResult = QueryNew('') />
    <cfset var userInfo = "" />

    <cfset arguments.username = scrubStringforLDAPQuery(arguments.username) />

    <cfset userInfo = retrieveUserInfo(arguments.username) />

    <cfset returnData["authenticated"] = false />
    <cfset returnData["detail"] = "" />
    <cfset returnData["user_info"] = QueryNew("") />

    <cftry>
            <cfldap
                    action="query"
                    server="#variables.ldapserver#"
                    username="#userInfo.DN#"
                    password="#arguments.password#"
                    filter="(&(uid=#arguments.username#)(objectClass=account))"
                    name="queryResult"
                    attributes="cn,dn,uid,displayName,objectClass,uidNumber"
                    start="dc=yoursite,dc=subdomain,dc=domain,dc=com"
                    maxrows="1"
                    port="#variables.port#"
                    timeout="#variables.ldaptimeout#"
                    secure="#variables.ldapsecuremode#" />

            <cfset returnData["authenticated"] = queryResult.RecordCount EQ 1 />
            <cfset returnData["user_info"] = queryResult />

            <cfcatch>
                    <cfif FindNoCase("Invalid Credentials",cfcatch.Message) LTE 0>
                            <cfrethrow />
                    </cfif>
                    <cfset returnData["detail"] = cfcatch.Message />
            </cfcatch>
    </cftry>

    <cfreturn returnData />

</cffunction>

<cffunction name="retrieveUserInfo" access="public" output="false" returntype="query" hint="">
    <cfargument name="username" type="string">

    <cfset var queryResult = QueryNew('') />

    <cfset arguments.username = scrubStringforLDAPQuery(arguments.username) />

    <cfldap
            action="query"
            server="#variables.ldapserver#"
            username="#variables.ldapuser#"
            password="#variables.ldappassword#"
            filter="(&(uid=#arguments.username#)(objectClass=account))"
            name="queryResult"
            attributes="cn,dn,uid,displayName,objectClass,uidNumber,shadowExpire,gecos,homeDirectory,loginShell"
            start="dc=yoursite,dc=subdomain,dc=domain,dc=com"
            maxrows="10"
            port="#variables.port#"
            timeout="#variables.ldaptimeout#"
            secure="#variables.ldapsecuremode#" />

    <cfif queryResult.RecordCount GT 1>
            <cfthrow message="More than 1 user found in LDAP" detail="More than 1 user matched uid=#arguments.username#" />
    </cfif>

    <cfreturn queryResult />
</cffunction>

<cffunction name="retrieveGroupInfo" access="public" output="false" returntype="query" hint="">
    <cfargument name="groupname" type="string">

    <cfset var queryResult = QueryNew('') />

    <cfset arguments.groupname = scrubStringforLDAPQuery(arguments.groupname) />

    <cfldap
            action="query"
            server="#variables.ldapserver#"
            username="#variables.ldapuser#"
            password="#variables.ldappassword#"
            filter="(&(cn=#arguments.groupname#)(objectClass=posixGroup))"
            name="queryResult"
            attributes="cn,dn,objectClass"
            start="dc=yoursite,dc=subdomain,dc=domain,dc=com"
            maxrows="10"
            port="#variables.port#"
            timeout="#variables.ldaptimeout#"
            secure="#variables.ldapsecuremode#" />

    <cfif queryResult.RecordCount GT 1>
            <cfthrow message="More than 1 group found in LDAP" detail="More than 1 group matched uid=#arguments.groupname#" />
    </cfif>

    <cfreturn queryResult />
</cffunction>

<cffunction name="scrubStringforLDAPQuery" access="public" output="false" returntype="string" hint="Removes offensive characters from string for use in an LDAP query">
    <cfargument name="stringToScrub" type="string">
    <cfargument name="blockWildcard" type="boolean" default="false">

    <cfset replaceCharacterList = ";=" />

    <cfif arguments.blockWildcard>
            <cfset replaceCharacterList &= "*" />
    </cfif>

    <cfset arguments.stringToScrub = REReplace(arguments.stringToScrub,"[#replaceCharacterList#]","","all") />

    <cfreturn arguments.stringToScrub />
</cffunction>

</cfcomponent>
于 2013-06-08T13:13:32.423 回答