我最近开始为我的应用程序使用springsecurityoauth2集成,它有一个Angular 分明的ui应用程序和很少的javarestapi。
我们将angular webapp配置为具有oauth2登录和restapi的资源服务器。这是一个理想的工作环境,因为当用户登录ui模块时,将启动sso提供者/idp openam(forgerock)等的登录过程。
应用程序部署在tomcat集群上。我们必须在负载平衡器中启用会话持久性和粘滞会话才能使此设置正常工作。
我们在一个用例中发现了一个问题,其中一个tomcat出现故障,用户在积极处理ui应用程序时丢失了会话。在这种情况下,当用户单击ui上调用restapi的任何链接或按钮时,负载均衡器会将请求发送给其他没有用户会话信息的tomcat,因此请求失败。
由于这个原因,我们在restapi服务中也启用了oauth2登录,现在restapi还将用户重定向到身份提供者进行登录,但仍然无法工作。用户有活动会话,因此idp没有提示提供凭据,但由于cors错误,请求仍然失败。
我们将cors filter配置为允许idp中的应用程序发出这样的请求,现在请求通过了,但浏览器得到了一个html页面,这导致我们在idp中进行了一些类似的cookie配置。现在请求转到我们的应用程序,但再次失败,出现cors错误。
以下是浏览器控制台中的错误消息。
Access to XMLHttpRequest at 'http://10.1.30.11:8080/myapp/ui/login/oauth2/code/forgerock?code=Ji1w2glJPCMH8POLEkeeqCzhRWI&scope=openid%20profile&iss=https%3A%2F%2F10.1.30.2%3A8443%2Fopenam%2Foauth2%2FTestRealm&state=ejDMvOjvSl9-p2XtZyhDjibt5bxOL3K7Wz1-j-5mDkw%3D&client_id=iag-base-service' (redirected from 'http://10.1.30.11:8080/myapp/rest/processes?startedSince=1616697000000') from origin 'http://10.1.30.11:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
请求报头
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.9
Connection: keep-alive
Cookie: JSESSIONID=D48D8D90E094DCEAC8AEBC9E40B44C90
Host: 10.1.30.11:8080
Origin: null
Referer: http://10.1.30.11:8080/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
我们也尝试在springsecurityrest应用程序中配置cors过滤器,但没有成功。
我对配置restapi以启动登录的理解是否正确?我们需要做进一步的配置吗?谢谢你的帮助。
暂无答案!
目前还没有任何答案,快来回答吧!