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