如何使用 Angular -> Spring Boot Oauth2 -> Keycloak 获取钥匙斗篷令牌



我有一个角度应用程序作为前端,弹簧引导作为后端技术,作为授权服务器,我使用的是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(

最新更新