我正在尝试首次实现支持SAML的SOAP服务,并且我在SAML实现中有一些关于安全令牌服务(STS)的角色的概念性问题.
用户---> Web应用程序--- SOAP/SAML - >消息传递应用程序
基本上情况是用户使用他的用户名和密码登录Web应用程序,Web应用程序依次进行身份验证并使用外部服务授权用户,成功进行身份验证/授权后,Web应用程序会创建Sender Vouches SAML断言,用户为subject,使用私钥对断言进行签名,使用WS-S将断言打包在soap信封中,并对消息传递应用程序进行SOAP调用.一旦消息传递应用程序收到请求,它就会使用Web应用程序的公钥验证签名,从SAML断言中提取身份验证和属性语句,并根据它们在端点上强制执行auth策略.
正如您在上面的场景中所看到的,没有涉及外部STS,但是我在SAML上阅读的大多数文献都表明绝对需要STS.我的问题是我在上述情况下做错了什么,因为我看不出任何理由为什么我绝对需要一个STS.当然有一个STS会很好,但至少在我看来,缺少它并不能阻止我为我的用例实现SAML.
不,您在Web服务中不需要用于SAML令牌的STS.STS交换一个令牌(其中'令牌'包括用户名+密码等内容)用于另一个令牌,因此有用的是,您的Web服务使用者可以发送一些输入令牌(通常是用户名+密码或签名+ X.509证书,以便于使用案例)到STS并获得SAML断言所有准备就绪.
现在,如果您有能力创建将由您的Web服务提供商接受的SAML令牌,请使用它!不需要STS - 无论STS是否参与其创建,线路上的实际SOAP消息都是相同的.
几年前我写了几篇博客文章,其中详细说明了一些:
Java EE Tools/NetBeans 5.5 Enterprise Pack中的Access Manager 7.1 Beta
SAML安全SOAP消息的剖析
Sun Access Manager 7.1已被OpenAM取代,但原则保持不变.特别是,第二个条目独立于任何实际产品.