在我们公司中,我们部署了多个Web应用程序,这些应用程序通过使用CAS服务器的SSO进行保护。用户请求应用程序的URL,如果尚未通过身份验证,则将重定向到CAS服务器登录页面。如果验证成功,则用户将被重定向回最初请求的URL。通用的工作流程,效果完美。
但是,我们也想使用CAS Server保护我们的REST Apis。我们首选的流程如下:
听起来就像CAS服务器支持的OAuth,只是在任何时候都不会要求用户提供凭据,但是我们还想为服务(即调用我们的API的其他应用程序)提供身份验证:
我们希望REST Api应用程序对用户凭据一无所知,他们甚至无法访问用户数据库,这对使用该应用程序的用户来说很好用(重定向到CAS登录页面)。
我不知道如何无需大量定制CAS服务器并自己实现此行为即可实现此流程。
Google将OWT 2.0的JWT用于服务器到服务器的应用程序,这似乎是可行的方法。
如果有人可以提供一些提示或替代方法(CAS服务器),我将不胜感激。也许有人已经使用CAS服务器实现了此模式,并且可以提供有关此问题的一些信息。
最好的问候,马可
最终,我们以一种简单的方式使其工作:
在CAS服务器上:
REST端点/cas/../token返回一个JSON对象:
{ serviceTicket: 'ST-ALKSJDFLSJDFLKJ-Ljksdf-sdflkjsf' }
在(基于Spring的)CAS客户端(受保护的资源):
<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
<property name="service" value="${cas.service.url}" />
<property name="sendRenew" value="false" />
<property name="authenticateAllArtifacts" value="true"/>
</bean>
现在,想要访问您受保护资源的客户端可以
GET / rest / foo / bar HTTP / 1.1 主机:www.example.com 授权:CUSTOM_SCHEME ST-ALKSJDFLSJDFLKJ-Ljksdf-sdflkjsf
由于CAS客户端CasAuthenticationFilter在每个请求上都获得工件(即ST),因此客户端仅在单个请求中就获得了身份验证。
此外,在CAS服务器上,您可以将ST配置为仅对n个请求有效(CAS客户端在CAS服务器上请求serviceValidate url的次数)。
我认为这是一种非常不错的方法,而不必大规模定制CAS服务器和客户端,随后又会造成严重的安全漏洞。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句