我有一个角度应用程序作为前端,弹簧引导作为后端技术,作为授权服务器,我使用的是keycloft 12.0.4。
我不想使用角引导和弹簧引导的密钥斗篷适配器,我想使用普通的oauth2oauth/token,这样我就可以在没有太多更改代码的情况下更改我的授权服务器,例如从密钥斗篷到okta。
我可以使用poster直接点击keycloft token_endpoint,并通过传递用户名、密码、client_credentials 来获得令牌
http://localhost:8080/auth/realms/dev/protocol/openid-连接/令牌
但是使用angular如果我点击token_endpoint,那么我会得到一个不同的CROS问题,我在angular中尝试了proxy.config.json,并在keycloft中设置了web origin*,但这不起作用,但基本上我不想直接点击keycloft我想通过spring-bootoauth2
访问'XMLHttpRequesthttp://127.0.0.1:8080/auth/realms/dev/protocol/openid-连接/令牌"来自原始"http://127.0.0.1:4200'已被CORS策略阻止:请求的资源上不存在"Access Control Allow Origin"标头。login.component.ts:37.
下面是我的应用程序.yml文件
server:
port: 8181
spring:
application:
name: cloudgateway
security:
oauth2:
client:
registration:
keycloak:
client-id: myadmin-service
client-secret: 4c7388e6-a8d9-403a-a5d4-416be4163b93
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider: keycloak
provider:
keycloak:
token-uri: http://localhost:8080/auth/realms/dev/protocol/openid-connect/token
issuer-uri: http://localhost:8080/auth/realms/dev
authorization-uri: http://localhost:8080/auth/realms/dev/protocol/openid-connect/auth
user-info-uri: http://localhost:8080/auth/realms/dev/protocol/openid-connect/userinfo
resourceserver:
jwt:
issuer-uri: http://localhost:8080/auth/realms/dev
jwk-set-uri: http://localhost:8080/auth/realms/dev/protocol/openid-connect/certs
Pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
我在上面的弹簧靴上缺少的配置是什么。
您可以配置WebSecurity
以使用JwtAuthenticationToken
填充安全上下文(此处为示例(,但此实现相当糟糕,需要相当多的Java配置。
我编写了一个可移植的OIDCAuthentication
实现,其接口几乎与KeycloakAuthenticationToken
一样丰富,但与任何OpenID Connect授权服务器兼容:OAuthentication<OpenidClaimSet>
(此处为教程(
在Angular中,我使用Angular auth-oidc客户端。
第页。S这个git-reo还包含注释,可以使用您选择的Authentication
实现轻松地填充JUnit安全上下文(请参阅@WithMockOidcAuth
、@WithMockJwtAuth
或@WithMockKeycloakAuth
(