我有一个用Sping Boot 编写的简单Rest API。我用Keycloak实现了OAuth2。我有一个用Angular编写的UI。
我的期望是,当我从Angular页面点击API URL时(比如点击按钮),我应该被重定向到Keycloak登录页面。但是当我试图从Angular应用程序访问API时,我得到了下面的错误。
CORS策略已阻止从源'http://localhost:4200'访问位于'的XMLHttpRequest(**从' http://localhost:8085/scheduler/read '**重定向):请求的资源上不存在“Access-Control-Allow-Origin”标头。
当我点击Angular中的按钮点击API http://localhost:8085/scheduler/read时,它试图重定向到Keycloak登录页面,但由于CORS错误,Keycloak的登录页面没有出现。
为了访问后端API http://localhost:8085/scheduler/read,我已经在Sping Boot 中完成了CORS配置,当我从浏览器直接访问此API URL时,此API没有CORS问题,Keycloak登录页面即将到来。但当从http://localhost:4200中运行的Angular应用程序时,问题发生了,我们试图命中API,它试图重定向到Keycloak登录页面http://localhost:8080/realms/CloudBrokerRealm/protoco......。
我已经在客户端下的Keycloak中添加了Web Origins,但CORS问题仍然存在。是否有任何方法可以绕过CORS问题,或者我们可以在Keycloak中禁用CORS。我正在将Keycloak作为Docker容器运行。
** Spring Boot application.properties:**
server.port=8085
spring.security.oauth2.client.registration.keycloak.client-id=cloud-broker-client2
spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.keycloak.scope=openid
spring.security.oauth2.client.provider.keycloak.issuer-uri=http://localhost:8080/realms/CloudBrokerRealm
spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8080/realms/CloudBrokerRealm
1条答案
按热度按时间a7qyws3x1#
显然,您将REST API配置为客户端(使用
spring-boot-starter-oauth2-client
和oauth2Login)。这是错误的。REST API是资源服务器,必须使用
spring-boot-starter-oauth2-resource-server
配置。如果您不知道如何配置,请遵循my tutorials。为了简化客户机上的OAurh2处理,请使用OIDC客户机库。
一旦解决了上述两个问题,就只需要http://localhost:4200作为Keycloak和REST API上允许的源。