具体实施方式
图1示出题为“Simplified Management of Authentication Credentials forUnattended Applications”的美国申请第11/640,371(美国公开第2008/0148373号)号中所描述的用于凭证管理的现有技术系统10,其全部内容结合于此作为参考。请求方节点12上存在服务器口令管理器(SPM)模块14、请求方应用程序16及可选地,安全缓存模块18。请求方节点12与实现口令授权系统的凭证管理器(CM)节点20进行通信。请求方节点12与CM节点20通信以请求访问目标节点28上的资源26。可选地,VPN(虚拟专用网络)模块30存在于目标节点28上以管理与CM节点20和请求方节点12中的一个或两者的通信。
请求方节点12、CM节点20、以及目标节点28都是计算机网络中的节点,并可以是单台机器服务器或互连服务器的集合。图1中多种模块是软件模块,其与节点的硬件相互作用以执行指令。
CM节点20对控制数据存储器24(其存储访问资源26所需的凭证)的CM模块22进行操作。当请求方应用程序16需要访问资源26时,必须请求这些凭证从而获得对资源的访问。请求方应用程序的请求传输至SPM模块14(其与请求方应用程序16存在于相同节点上)。SPM模块14接收请求,从请求中提取出相关信息,并将该信息打包为请求包以便传输到CM模块。SPM模块14使用由CM模块22生成并预先传输至SPM模块14的加密密钥来加密该请求包。SPM模块14也利用经加密的请求包传输与请求方节点12相关的指纹数据。
为了将凭证传输至目标资源26,CM模块22可将这些凭证连同要被准许访问的请求方应用程序16的身份直接发送至目标资源26。可选地,CM模块22可将凭证返回到SPM模块14,从而请求方应用程序16可直接使用这些凭证来访问目标资源26。CM模块22也可与目标资源26及其相关联的SPM模块32通信以便更新关于改变的凭证,如口令和加密密钥。
应该注意,请求方节点12中的SPM模块14可使用安全缓存18存储请求方应用程序16的凭证,从而将来不需要通过CM模块22就可对目标资源进行访问。类似地,由CM模块22生成并由SPM模块14用于加密/解密与CM模块22通信的加密密钥也可存储在安全缓存18中。
为了安全地操作,在能够执行上述处理之前,SPM模块14、32中的每一个必须向CM模块22对其自身进行识别并接收唯一的加密密钥用于与CM模块22进行通信。作为该设置阶段的一部分,每个SPM模块14、32均收集关于其节点12、28的数据,这些数据包括何种资源可以是目标资源、何种应用程序可以是请求方应用程序、以及关于这些资源和应用程序的详细资料。SPM模块14、32还收集其节点的配置信息(诸如安装在节点上的硬件)和唯一识别该节点的其他配置信息。然后,可以将配置信息(其可包括序列号、安装在节点上的应用程序、安装的软件和硬件这两者的版本号)用作节点的“指纹”。然后,一个节点上收集的指纹数据连同关于该特定节点的其他信息一起被发送到CM节点20以便验证。一旦验证,请求方节点和存在于其上的SPM模块可请求访问向CM模块22注册的资源。当然,仅仅是存在于向CM模块22注册的节点上的请求方应用程序才被允许访问目标资源26。节点上的新应用程序在能够请求访问目标资源之前必须注册并由CM模块22验证。
应该注意,为了获得对于访问资源所需的凭证进行访问,每次存在于节点上的请求方应用程序要求访问时,每个SPM模块均必须提供其节点指纹数据。如上所述,该指纹数据连同与请求方应用程序的目标资源访问请求相关联的相关信息一起被传输到CM模块22。当CM模块22接收这种指纹数据时,CM模块22可从数据存储器24检索该特定节点的注册数据,以检查从请求方节点接收的指纹数据是否与最初验证该请求方节点时接收的指纹数据相匹配。如果匹配,则SPM模块是其所号称的模块并可继续进一步的检查。如果不匹配,则资源访问请求被拒绝。拒绝这种请求意味着请求方节点必须经历初始注册/验证处理。
应当进一步注意,一旦请求方节点(通过存在于其上的SPM模块)或SPM模块(如果每个请求方节点存在一个以上的SPM模块)被CM模块22验证,则CM模块生成将用于在CM模块22与SPM模块或请求方节点之间的通信的密钥。一旦副本已经发送到相关SPM模块/请求方节点,这些密钥就被保存在数据存储器24中,以便由CM模块使用。应当清楚,请求方节点可具有存在于其上的多于一个的SPM模块,其中每个SPM模块负责管理请求方节点上至少一个请求方应用程序的目标资源访问。对于这种配置,每个SPM模块均可具有其自身的密钥集,用于与CM模块通信。对于更高的安全性,可具有如下配置,其中每个请求方应用程序具有与CM模块共享的、其自身的加密密钥,以便在这两者之间通信时使用。
每个请求方应用程序连同其关联的SPM模块及其存在于之上的节点一起由CM模块来注册并验证。为了获得对目标资源的访问,请求方应用程序请求这种访问并传输数据(在其寻求验证和注册时,该数据最初被传输到CM模块)。这种数据可以包括应用程序名称、应用程序文件存储位置、应用程序执行路径、应用程序身份(ID)、应用程序单向哈希值、会话授权密钥,以及其存在于其上的节点的机器指纹。当然,取决于系统配置,任何上述子集(具有或不具有额外数据)都可用于获得对资源的访问。
关于CM节点20中的数据存储器24,该数据存储器可以是数据库形式。为了存储在数据库的数据库字段中,可用强密码对关键值进行加密。可用长、强口令将关键的经加密数据写入专用数据库,该专用数据库是数据库的一部分。然后,可利用口令(使用管理的对称密钥对该口令进行加密)来保护该专用数据库。接下来,经管理的密钥可存入公共数据库表中,以允许密钥以特别或预定方式改变。
为了简化CM模块的记录保持任务,可使用别名概念。每个目标资源(如目标服务器上的应用程序)可与特定别名关联。还与别名关联的是目标资源的凭证(例如帐户和口令)。在对可能请求访问目标资源的潜在请求方应用程序进行注册/验证时,该应用程序连同请求方应用程序的访问权以及任何释放对于访问目标资源的凭证所需要的运行标准被映射到别名。这引入了对于检索凭证的一定程度的间接性,其允许凭证改变而对请求方应用程序无任何影响。因此,如果访问特定资源所需的凭证改变,不必逐个通知请求方应用程序。
如上所述,SPM模块14可使用安全缓存18,以便同一节点上的其他请求方应用程序可以对先前已访问的资源进行访问。这允许请求方应用程序更快的访问资源。为了使用安全缓存18,从CM模块22接收的凭证可保存在安全缓存18中。如果与SPM模块14在同一节点上的请求方应用程序16请求访问其凭证已经存储在安全缓存18中的资源,则SPM模块14可本地认证请求方应用程序并提供所需凭证。当然,出于安全原因,可加密安全缓存的内容,且该内容可以是时间限制的(因为该内容可在预定的时间量后被自动删除)。这种方案确保凭证需被周期性访问,从而绝不会不确定地存储失效凭证。
为了确保用于访问资源的凭证(例如,口令和加密密钥)是最新的,CM模块可改变用于这些资源的凭证。CM模块22可与资源(例如,软件应用程序)进行通信从而改变访问该资源所需的凭证。一旦凭证已经被改变,就将新凭证传输至CM模块22。然后,CM模块22更新数据存储器24中的相关记录。
图1中所示的系统提供了用于无人值守的应用程序的安全凭证管理。然而,正如本领域技术人员理解的那样,SPM模块14,32必须与请求方应用程序和目标节点28集成,这需要熟练程序员并改变请求方应用程序16的代码。因此,为了在运行遗留应用程序的大型企业中鼓励采用安全口令授权系统,期望提供一种装置来与口令授权系统接口,而不需要专业记录或编程知识。
大体上,本发明提供一种方法和系统,利用该方法和系统可通过安装和配置SPM目标资源连接组件(以下称为“SPM连接组件”)来认证无人值守的请求方应用程序的数据库连接,而无需重新编码请求方应用程序。SPM数据库连接组件拦截对目标资源的请求,按照对于凭证管理器可理解的形式对请求进行再打包,访问来自凭证管理器的安全凭证,并将凭证传递至目标资源。例如,凭证管理器可以是上述CM节点,诸如服务器口令管理器或其他可用凭证管理器。
图2示出本发明实施方式的整体系统架构。请求方节点100使存在于其上的请求方应用程序102访问存在于目标节点106上的目标资源104。介于请求方应用程序102与本地目标资源连接组件110(以下称为“本地连接组件”)之间的SPM连接组件108拦截来自请求方应用程序102的、对于目标资源104进行访问的请求,并将该请求路由到存在于请求方节点102、或存在于CM节点114上(如图所示)的凭证管理器(CM)112。本地连接组件是已知组件,其通过执行诸如JDBC或ODBC的标准数据库连接应用程序编程接口(API)来为请求方应用程序提供数据库连接。该连接可以是数据库专用的。
凭证管理器112是请求方节点100所配置或可利用的组件。凭证管理器112协调本地请求方应用程序的凭证请求。凭证管理器112通常提供API以便改变请求方应用程序类型。在实施方式中,CM节点114包括上面关于图1描述的组件和功能。请求方节点100、CM节点114、以及目标节点106都是计算机网络中的节点并可以是单台机器服务器或互连服务器的集合。图2中各种模块是软件模块,这些软件模块与节点的硬件相互作用以执行其指令。
参考图2,在图3中示出了使用SPM连接组件108的凭证管理系统的整体操作。请求方应用程序102请求对诸如数据库的目标资源104的连接(步骤150)。SPM连接组件108拦截或接收此请求(步骤152),并对连接请求进行解码(步骤154)。然后,SPM连接组件请求来自凭证管理器112的凭证(步骤156)。凭证管理器112对该请求进行认证,并返回必须的凭证从而实现SPM连接组件108的请求(步骤158)。SPM连接组件108使用凭证管理器112提供的凭证通过本地连接组件110来初始化本地数据库连接(步骤160)。然后,本地连接组件110建立、或试图建立至驻存目标资源104的外部目标系统的连接(步骤162)。如果凭证是有效的,则建立连接,并且所建立的至目标104的连接返回到请求方应用程序102(步骤164)。如果试图建立连接不成功,则可执行任选的再尝试。从凭证管理器112检索进一步的凭证,且试图在步骤156处开始再连接尝试。可接受的再尝试次数是设计选择的问题。
如图4所示,SPM连接组件108是软件模块。其结合本地数据库连接组件110和凭证管理器112使用。SPM连接组件108包括用于与请求方应用程序102通信的请求方接口180、用于与凭证管理器112通信的凭证服务接口182、用于与本地连接组件通信的本地目标资源连接接口184、用于允许从安全管理器更新的安全接口186、以及用于确定如何将请求方的请求转换为适当API对凭证管理器112呼叫的决策引擎188。
SPM连接组件为请求方应用程序提供认证并授权的数据库连接。在本地连接组件是动态加载的情况下,SPM连接组件用作数据库连接组件,其实时检索数据库、或其他目标资源、凭证,而不需要请求方应用程序代码变化。SPM连接组件认证和授权请求方应用程序的数据库连接的所有访问。
可参考示例性实施例来最佳地理解SPM连接组件108的功能。下面描述两个示例性实施例:JDBC SPM连接组件,以及ODBC SPM连接组件。这些实施例是非限制性的,而仅是说明性的。该实施例假定通晓Java编程,以及JDBC和ODBC连接,这对本领域技术人员是可预期的。
JDBC是Java编程语言的API,其定义客户如何访问数据库。其提供用于查询和更新数据库中数据的方法。JDBC使用定制的Java DataSource对象。在Java编程语言中,DataSource对象是数据源的表示。在基本术语中,数据源是存储数据的设施。数据源对于大型公司来说可以与复杂数据库一样繁杂,或与具有数行和数列的文件一样简单。数据源可以存在于远程服务器上,或可以位于本地桌面机器上。应用程序使用连接来访问数据源,且DataSource对象可以当作是DataSource实例表示的特定数据源的连接代理。定制的Java DataSource对象将对于数据源或目标资源的呼叫进行封装,且透明地访问凭证管理器112从而检索访问数据源所需的安全凭证。
SPM连接组件108的作用是透明管理数据库连接获取中的认证。为了实现该功能和特征能力,设置了本文中称为SPM代理驱动器的代理JDBC驱动器类并实现决策引擎188。代理驱动器类在专门定义的URL上进行操作,该URL对由本地连接组件110管理的真正底层JDBC连接管理和Driver利用所需的所有信息进行编码。该代理类由用户在配置期间指定为任何数据库的Driver类。然后,用户可以按照标准方式对必要的JDBCURL信息进行编码。在执行中,JDBC代理驱动器与正常JDBC驱动器一样运行,但透明地执行委派的JDBC驱动器调用,并呼叫凭证管理器112。代理JDBC驱动器类使用被称为SPM JDBC URL的专用JDBC URL编码,其细节在下面给出。功能性地,SPM代理驱动器服从所有要求并遵从所有用于Java JDBC驱动器类的使用惯例。
为了安全地检索访问目标资源所需的凭证,用户指定的URL属性用于声明SPM别名。如上所述,每个目标资源(例如,目标服务器上的应用程序)可与特定别名关联。还与别名关联的是目标资源凭证(例如,帐户和口令)。在注册/验证请求访问目标资源的潜在请求方应用程序时,将其连同请求方应用程序的访问权以及释放访问目标资源的凭证所需要的运行标准一起映射到别名。这引入对于检索凭证的一定程度间接性,其允许改变凭证而对请求方应用程序无任何影响。因此,如果访问特定源所需的凭证改变,不必逐个通知请求方应用程序。
对用户指定的URL属性进行定义以声明SPM代理驱动器应用为真实(目标)JDBC驱动器的确切驱动器类。在所有连接尝试中,从凭证管理器112获得诸如用户/口令的凭证。SPM代理驱动器忽略所有呼叫方提供的用户/口令实例。优选地,SPM代理驱动器还可以处理调用凭证管理器112中故障或错误情况。为了处理这些情况,可定义必须从SQL Exception获得的一些SPM特定异常。
SPM JDBC代理的核心类是SPM代理驱动器类,其实现java.sql.Driver接口并包含所有要求的服务实现。SPM代理驱动器管理所有SPM JDBC URL。更具体地,向驱动器管理器注册的SPM代理驱动器类的单个例子管理所有SPM JDBC URL。这意味着不同数据库可同时通过单个SPM代理驱动器实例来访问。
SPM JDBC URL是定制的JDBC URL,其通过凭证管理器112对真实的JDBC URL连同用于代理驱动器及处理和管理凭证的附加信息进行编码。SPM JDBC URL格式定义为:
Spm:[url];P1=V1;...;Pn=Vn其中
Spm是文字前缀“spm:”;
[url]是用户特定的真实JDBC(base)URL,如
Jdbc:hsqldb:hsql://localhost:9001/cspml
每个Pi均是真实JDBC URL的属性的属性名称,否则是SPM区分的属性SPMAlias或SPMDriver之一;
SPMAlias必须出现在Pi列表中,其值必须是用于用户/口令查询的预期SPM别名(SPMAlias);以及
SPMDriver可出现在Pi列表中,且如果这样的话,必须是对[url]值有效的JDBC驱动器(JDBC Driver)。
SPM属性被提供给Java属性映射,真实JDBC驱动器可从该映射获得值。
在SPM代理驱动器类中实现决策引擎188,且将SPM JDBC URL解码或解析为内部使用的相关部分。这些部分是:
1.Original URL:按规定定义为SPM JDBC URL。
2.Base URL:仅定义为上面的[url]片段。
3.Driver URL:在任何出现SPMAlias和SPMDriver移走(也可出现移走用户和口令)情况下,定义为SPM JDBC URL。
4.SPMAlias:定义为需要的SPMAlias属性的值。
5.Driver Class Name:如果有,则定义为SPMDriver属性的值,否则为空。
在SPM JDBC URL所有应用URL参数的服务中,其被SPM ProxyDriver类接收。SPM Proxy Driver类获得并保持目标JDBC Driver,从而通过使用由属性SPMDriver的值(如果存在)命名的类的例子调用SPM JDBCURL连接,否则通过查询接受[url](Base URL)的驱动器来调用SPM JDBCURL连接。在任一情形中,目标Driver的获得可通过查询DriverManager类发生。并且,实现java.sql.Driver接口,SPM Proxy Driver存储建立给定SPM JDBC URL的连接所需的所有数据,如在JdbcDriverUrlEntry类的例子中请求方应用程序或服务器的配置或指纹信息。JdbcDriverUrlEntry例子可存储在由SPM JDBC URL加密的缓存中。
SPM连接组件的JDBC实现提供Java库(例如,具有JavaDoc的jar文件),用户可使用该Java库将凭证管理器112的功能集成到其应用程序中,而无需再编码该应用程序。在使用中,终端用户仅需要将具有驱动器的库和关联的类添加到请求方应用程序服务器的类路径;并配置请求方应用程序服务器中DataSource从而使用规定SPM JDBC URL的SPM ProxyJDBC驱动器。更具体地,为了使用SPM JDBC Driver,修改配置文件中的属性从而按先前规定地设置连接url,并将驱动器类设置为SPM JDBCDriver。
SPM Proxy Driver类及其所属类形成可分开应用的独立组件。在集成时,其具有对于cspmclient.jar库(可能地,log4j(或其他登录系统))的集成依赖,以及通过SPM JDBC URL在配置中声明的供应商指定的JDBCDriver类。
连接请求由提供URL和属性集的请求方应用程序102做出。该请求由SPM Proxy Driver接收,其首先检查接收的URL是否为SPM JDBC URL且因此由类处理。如果URL不是SPM JDBC URL,则连接请求失败。如果URL是SPM JDBC URL,则从JdbcDriverUrlEntryCache获得所需的JdbcDriverUrlEntry例子。JdbcUrlDriverEntryCache类的associateDriver服务负责定位与JdbcUrlDriverEntry例子中SPM JDBC URL关联(绑定)的目标JDBC Driver。如果缓存条目(cache entry)不存在,则在此刻创建缓存条目。
呼叫凭证管理器112从而在每个重复的尝试中检索必要的安全凭证,诸如,用户名和口令。优选地,对于由SPM Proxy Driver实现的凭证管理器112与SPM连接组件之间的通信进行加密,以避免未授权方对其进行检测或拦截。在凭证管理器112与SPM Proxy Driver之间预先协商该加密,并可以(例如)涉及加密密钥的交换。凭证管理器112返回与目标资源26建立连接所需的安全凭证。在每次尝试时,呼叫本地目标JDBC驱动器以获得连接。所用参数是base JDBC URL和包含来自JdbcDriverUrlEntry例子的合并属性以及由请求方应用程序102提供的属性的属性对象。在合并属性中,由凭证管理器112返回的值来改写诸如硬编码的用户名和口令的凭证。如果获得一个连接,则连接立即返回到请求方应用程序102。否则,发起如上面参考图3描述的再尝试,或可向呼叫方发出SQLException。
对于连接请求的低水平驱动器管理意味着对于数据库口令已经改变(如,通过凭证管理器112)的用户所获得的所有新连接是使用新口令实现的。该动作自动发生,而无需任何知识或任何自身数据源的干预。这种由SPM JDBC驱动器的连接管理确保数据库口令变化对数据源活动是完全透明的。
在ODBC实现中,提供定制的SPM ODBC驱动器。ODBC提供用于访问目标资源的标准软件API方法,如数据库管理系统。当请求方应用程序102请求连接到数据库时,驱动器使用凭证管理器COM对象以检索来自凭证管理器112的凭证。然后,该请求传递到本地目标ODBC驱动器从而完成转换。优选地,SPM ODBC驱动器实现所有ODBC 2.0功能以及用于后向兼容的某些降级ODBC 1.0功能。
如同SPM JDBC Driver,SPM ODBC Driver实现决策引擎188。SPMODBC Driver连接字符串包含如下信息:Driver-SPM ODBC Driver的名称;Alias-在检索凭证时发送到凭证管理器112的目标别名;以及TargetDriver-目标驱动器的连接字符串。TargetDriver字符串含目标驱动器所需的所有信息,但不含用户Id和/或口令。
SPM ODBC Driver需要对这三个函数添加功能:SQLConnect-使用预定义的DSN创建对数据库的连接;SQLDriverConnect-使用连接字符串创建对数据库的连接;以及ConfigDSN-创建、修改或删除DSN。
SQLConnect函数具有7个参数。当调用API函数SQLConnect时传递第一个参数。第二个参数和第三个参数用于检索配置。剩余的四个参数、用户名和口令被忽略。当调用驱动器的SQLConnect函数时,将进行以下步骤:检索Target Alias和Target DSN;使用Target Alias检索凭证;以及调用API函数SQLConnect函数来传递Target DSN和从凭证管理器检索的凭证。
SQLDriverConnect函数具有8个参数。第三和第四个参数用于检索配置信息。剩余的参数在API函数SQLDriverConnect被调用时被下传。当驱动器的SQLDriverConnect被调用时,将进行以下步骤:从连接字符串提取Target Alias和Target Driver;使用Target Alias检索凭证;创建TargetDriver连接字符串的副本并添加从凭证管理器112检索的凭证(用户id和口令);以及调用传递Target Driver连接字符串的更新副本的API函数SQLDriverConnect函数。
在前面的描述中,为了解释,给出大量细节以便提供对本发明实施方式的透彻的理解。然而,对本领域技术人员来说显而易见的是,这些特定细节不是实施本发明所必需的。在其他情形中,为了使本发明易于理解,已知的电气结构和电路是以框图的形式示出的。例如,没有提供关于本文描述的本发明实施方式是否是作为软件程序、硬件电路、固件、或其组合实现的特定细节。
本发明的实施方式可表示为存储在机器可读介质(也称为计算机可读介质、处理器可读介质、或具有在其中包含的计算机可读程序代码的计算机可用介质)中的软件产品。机器可读介质可以是任何合适的有形介质,包括磁性、光学、或电气存储介质,包括磁盘、光盘只读存储器(CD-ROM)、存储器器件(易失性或非易失性)、或类似存储器。机器可读介质可包含指令、代码序列、配置信息、或其他数据的各种集合,其在被执行时,使处理器执行根据本发明实施方式的方法的步骤。本领域技术人员可以理解实现所述的本发明必须的其他指令和操作也可存储在机器可读介质中。从机器可读介质运行的软件可与电路接口从而执行所述任务。
理解本发明的人员可设想上面的替换结构和实施方式或变化,所有这些都落在权利要求限定的本发明的范畴内。