当前位置: 首页 > 知识库问答 >
问题:

如何使用Angular->Spring Boot OAuth2->KeyCloak获得密钥斗篷令牌

帅令雪
2023-03-14

我有一个angular应用程序作为前端,spring boot作为后端技术,作为授权服务器,我使用的是KeyClope 12.0.4。

我不想在angular和Spring Boot中使用KeyClope适配器,我想使用普通的oauth2 oauth/token,这样我就可以在不需要太多更改代码的情况下将我的授权服务器从KeyClope更改为okta。

我可以使用postman直接点击KeyClope token_endpoint,并通过传递用户名、密码、客户端_凭据来获取令牌

http://localhost:8080/auth/realms/dev/protocol/openid-connect/token

但是使用角如果我打token_endpoint然后一起我得到了一个不同的问题的CROS,我尝试proxy.config.json在角,也设置web起源*在keycloak,但不工作,但基本上我不想直接打keycloak我想通过Spring引导oAuth2

在'http://127.0.0.1:8080/auth/realms/dev/protocol/openid-连接/标记“来自源”http://127.0.0.1:4200'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'头。登录。组成部分ts:37。

下面是我的application.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
 

波姆。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>

上面的spring boot缺少什么配置。

共有1个答案

田骁
2023-03-14

您可以将WebSecurity配置为使用JwtAuthenticationToken填充安全上下文(这里和那里都有示例),但这种实现相当糟糕。

我写了一个可移植的OIDC身份验证实现,它的接口几乎和KeycloakAuthentiationToken一样丰富,但与任何OpenID Connect授权服务器兼容:OidcAuthentiation(这里和那里的示例)

在Angular中,我使用angle-auth-oidc-Client,但是angle-oauth2-oidc也应该没问题。

P. S.这个git回购还包含注释,可以轻松地用您选择的验证实现填充JUnit安全上下文(请参见@SusMockOidcAuth@SusMockJwtAuth@SusMockKeycloakAuth

 类似资料:
  • 谁知道如何使用获取id_令牌? 我一直在(Spring,JEE)和postman中与合作。 基本的工作正常,但我需要,因为有一些声明,它们不存在于中,但它们存在于中。 使用库,我可以获得Keycloak上下文,但id_token属性始终为null。 有什么主意吗?

  • 我们有一个角度水疗中心,是由OIDC授权使用隐式流。我们使用Keycloak作为我们的授权服务器。访问令牌的寿命很短,并且通过隐藏的iframe定期刷新。 在了解到授权代码流PKCE是授权SPA的新推荐方式后,我们决定切换流。一切正常,但每次我们调用令牌endpoint时,KeyCloak确实会给我们一个刷新令牌(以及Access和ID-Token)。由于没有安全的方法来存储刷新令牌,我们想继续使

  • 我试图使用Keycloak的openId-connectendpoint来获取关于用户角色的信息。我使用/auth/realms/moje/protocol/OpenID-connect/userinfoendpoint来获取关于已验证用户的信息。我可以获得姓名、用户名、电子邮件等信息。但是我不能强迫Keyclak给我关于用户角色的信息。 我已经阅读了openID文档,我没有找到任何关于必须获取角

  • 使用KeyCloak时,访问令牌与用户信息令牌有何不同? 从OAuth2/OpenIDConnect中,我了解到访问令牌提供了用户已经通过身份验证的信息,您需要使用用户信息令牌来获取关于用户及其配置文件/角色等的更多信息。 当我看到访问令牌时https://jwt.io/而不是用户信息令牌。我能够获得与用户配置文件相同的信息 为什么会这样,使用Keycloak时访问令牌与用户信息令牌有何不同?

  • 不知何故,我迷失了Spring Security和Keycloak。 在一个应用程序中,我成功地从KeyClope实例接收了一个访问令牌。然后,我使用这个令牌请求我的Spring Security服务器(它使用相同的KeyClope实例)。 但我得到的只是403个错误。 以下是代码摘录(用kotlin编写): 安全配置: 在我的控制器中: 在我对服务器的调用中,我可以验证授权头的设置如下:auth

  • 部署在AWS上,我不想隧道到盒子并打开浏览器禁用它。 似乎存在一个配置:,可以放置在文件,但我不确定在哪个对象下。我在“王国”下试过,但一点运气都没有。 我不想在适配器级别禁用它,它需要全局禁用,那么在哪里,或者如何全局禁用ssh/https? 另外,我知道这在生产中是不推荐的。)