首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过SpringBoot从Keycloak获取访问令牌?

通过Spring Boot从Keycloak获取访问令牌,可以按照以下步骤进行:

  1. 首先,确保已经在Spring Boot项目中添加了Keycloak的依赖。可以在项目的pom.xml文件中添加以下依赖:
代码语言:txt
复制
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-spring-boot-starter</artifactId>
</dependency>
  1. 在Spring Boot的配置文件(application.properties或application.yml)中配置Keycloak相关的属性,包括Keycloak服务器的URL、Realm名称、客户端ID和客户端密钥等。例如:
代码语言:txt
复制
keycloak.realm=your-realm
keycloak.auth-server-url=https://your-keycloak-server/auth
keycloak.resource=your-client-id
keycloak.credentials.secret=your-client-secret
  1. 创建一个用于获取访问令牌的方法。可以在一个自定义的类中添加以下代码:
代码语言:txt
复制
import org.keycloak.OAuth2Constants;
import org.keycloak.adapters.springsecurity.client.KeycloakRestTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

@Component
public class KeycloakTokenProvider {
    
    @Autowired
    private KeycloakRestTemplate keycloakRestTemplate;
    
    @Value("${keycloak.resource}")
    private String clientId;
    
    @Value("${keycloak.credentials.secret}")
    private String clientSecret;
    
    @Value("${keycloak.auth-server-url}")
    private String keycloakUrl;
    
    public String getAccessToken() {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        
        MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
        body.add(OAuth2Constants.GRANT_TYPE, "client_credentials");
        body.add(OAuth2Constants.CLIENT_ID, clientId);
        body.add(OAuth2Constants.CLIENT_SECRET, clientSecret);
        
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(body, headers);
        
        ResponseEntity<AccessTokenResponse> responseEntity = keycloakRestTemplate.postForEntity(
                keycloakUrl + "/realms/{realm}/protocol/openid-connect/token",
                requestEntity,
                AccessTokenResponse.class,
                "your-realm"
        );
        
        AccessTokenResponse response = responseEntity.getBody();
        return response.getAccessToken();
    }
}
  1. 现在可以在其他需要使用访问令牌的地方调用getAccessToken()方法来获取访问令牌。例如:
代码语言:txt
复制
@RestController
public class MyController {
    
    @Autowired
    private KeycloakTokenProvider tokenProvider;
    
    @GetMapping("/api/data")
    public String getData() {
        String accessToken = tokenProvider.getAccessToken();
        
        // 使用访问令牌进行后续操作
        // ...
        
        return "Data";
    }
}

这样,通过Spring Boot从Keycloak获取访问令牌的过程就完成了。在调用getAccessToken()方法时,会向Keycloak服务器发送请求并获取访问令牌,然后可以在其他需要认证的API中使用该访问令牌进行访问控制和授权操作。

关于Keycloak的更多信息和使用方法,可以参考腾讯云的产品介绍页面:Keycloak产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

吊炸天的可视化安全框架,轻松搭建自己的认证授权平台!

d jboss/keycloak:14.0.0 运行成功后可以通过如下地址访问Keycloak服务,点击圈出来的地方可以访问管理控制台,访问地址:http://192.168.7.142:8080 ?...修改完成后保存并刷新页面,Keycloak控制台就变成中文界面了; ? Keycloak非常良心的给很多属性都添加了解释,而且还是中文的,基本看下解释就可以知道如何使用了; ?...(A)客户端将用户导向认证服务器; (B)用户在认证服务器进行登录并授权; (C)认证服务器返回授权码给客户端; (D)客户端通过授权码和跳转地址向认证服务器获取访问令牌; (E)认证服务器发放访问令牌...(A)客户端用户获取用户名和密码; (B)客户端通过用户的用户名和密码访问认证服务器; (C)认证服务器返回访问令牌(有需要带上刷新令牌)。...结合SpringBoot使用 接下来我们体验下使用Keycloak保护SpringBoot应用的安全。由于Keycloak原生支持SpringBoot,所以使用起来还是很简单的。

2.6K21
  • 在 Kubernetes 中使用 Keycloak OIDC Provider 对用户进行身份验证

    客户端创建完成后,需要修改客户端的 Access Type 为 confidential,表示客户端通过 client secret 来获取令牌;Valid Redirect URIs 用于设置浏览器登录成功后有效的重定向...现在我们已经完成了 Keycloak 和 Kubernetes 的设置,接下来我们尝试获取身份验证令牌,需要提供以下参数: grant_type:获取令牌的方式。...当运行 kubectl 命令时,kubelogin 会打开浏览器,用户需要输入用户名和密码登录程序,认证通过后,kubelogin 会认证服务器获取一个令牌,然后 kubectl 就可以使用该令牌和...当用户 tom 执行 kubectl 命令时,将会通过 kubectl oidc-login get-token 命令获取令牌。...10 总结 本文通过详细的步骤为大家展示了如何让 API Server 使用 OpenID Connect 协议集成 Keycloak 进行身份认证,同时介绍了如何使用 kubectl 和 kubelogin

    6.5K20

    Keycloak Spring Security适配器的常用配置

    use-resource-role-mappings 如果设置为true, Keycloak Adapter将检查令牌携带的用户角色是否跟资源一致;否则会去查询realm中用户的角色。...生成secret的方法是在Keycloak控制台上修改对应客户端设置选项的访问类型为confidential,然后在安装中查看对应配置项。当访问类型不是confidential时该值为false。...autodetect-bearer-only 如果你的应用不仅仅是Web应用而且还提供API服务(现在通常是Restful Service),开启了这一配置后Keycloak服务器会通过请求标头相对“智能...expose-token JavaScript CORS 请求通过根路径下/k_query_bearer_token用来服务器获取令牌的,好像是nodejs相关的后端应用使用的东西,我折腾了半天没有调用成功...credentials 当客户端的访问类型(access type)为Confidential时,需要配置客户端令牌,目前支持secret和jwt类型。参考public-client中的描述。

    2.5K51

    通过管理API管理OAuth2 认证授权服务器Keycloak

    在使用Keycloak的时候可能有同学都注意到用户的管理都是通过Keycloak提供的UI来进行的,虽然很方便但是很多时候并不适合在开发中使用。...系列博文可通过点击#keycloak查看。...根据Token中携带的权限信息来获取对应API的访问权限。所以我们在使用Keycloak Admin Client时要特别注意当前你使用的客户端是否有权限访问。...,并以此Keycloak服务器获取访问令牌,继而能够进行进一步的访问授权操作。...开启服务账户功能 这样我们可以直接向Keycloak服务器获取realm-management的访问凭据,因为realm-management有全部的管理功能,所以我们可以以客户端的名义而非管理用户的名义创建新用户了

    2.9K60

    Keycloak简单几步实现对Spring Boot应用的权限控制

    今天就来尝试一下对应的Spring Boot Adapter,来看看keycloak如何保护Spring Boot应用的。 客户端 相信不少同学用过微信开放平台、蚂蚁开放平台。...首先我们需要在这些开放平台上注册一个客户端以获取一套类似用户名和密码的凭证。有的叫appid和secret;有的叫clientid和secret,都是一个意思。...realm的客户端列表 ❝你可以通过http://localhost:8011/auth/realms/felord.cn/account/来登录创建的用户。...获取和刷新JWT 我们可以通过下面这个方式获取用户登录的JWT对: POST /auth/realms/felord.cn/protocol/openid-connect/token HTTP/1.1...:8011/auth # 客户端名称 resource: springboot-client # 声明这是一个公开的客户端,否则不能在keycloak外部环境使用,会403 public-client

    2.2K50

    SpringBoot0到实战5:项目是如何通过jar包启动的?

    Spring-boot-maven-plugin谈起 对于SpringBoot打包的jar文件,只需要通过jar -jar一行命令便可以启动一个web项目,那springboot如何做到的呢,这需要从...-0.0.1-SNAPSHOT.jar 打开上面jar的文件可以发现有如下东西: 通过查阅资料和学习,可以发现,Spring-boot-maven-plugin完成了几件对打包重要的事情: 1、生成核心的文件...生成核心的文件MANIFEST.MF谈起 使用记事本打开MANIFEST.MF文件: 在文件中,有两个重要的属性: Start-Class:com.kfit.springboothellosts.SpringBootHelloStsApplication...加载完成之后会找到Start-Class指定的启动类,通过反射进行启动应用。...IDEA中如何启动SpringBoot应用 在IDE里启动SpringBoot应用是最简单的一种情况,依赖的Jar都让IDE放到classpath里了,所以Spring boot直接启动。

    14610

    Spring Boot 3.1 中如何整合Spring Security和Keycloak

    在今年2月14日的时候,Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器。...但是,如此强大的Keycloak,还要用怎么办呢?本文就来聊聊,在最新的Spring Boot 3.1版本之下,如何Keycloak和Spring Security一起跑起来。...String hello(){ return "hello"; } } 第五步:创建SecurityFilterChain,用来告知Spring Security在JWT令牌中查找角色信息的位置...尝试请求/test/hello接口: 当不包含Authorization头信息的时候,将返回401错误 当包含Authorization头信息(前文用调接口获取的Access Token)的时候,才能正确访问到...所以,只要我们理解Spring Security是如何处理OAuth和OIDC的,那么与Keyloak的集成依然不复杂。

    99940

    【第二十一篇】Flowable之SpringBoot集成FlowableUI

    SpringBoot项目中如何的来集成FlowableUI设计器。...结构为:   我们可以看到整个的目录结构就是一个maven的聚合项目,其中的web项目就是flowable-ui-app这个,我们可以通过其中的SpringBoot项目的启动类来直接启动这个项目就可以来访问了...4.SpringBoot项目整合   然后我们来看看怎么在我们自己创建的SpringBoot项目来整合FlowableUI,其实通过上面的操作大家应该会有对应的想法了,我们只需要创建一个SpringBoot...4.1 创建项目   我们先创建一个普通的SpringBoot项目 4.2 添加相关的依赖   直接flowable-ui-app中的pom.xml中拷贝对应的依赖,并删除对应的无用的插件。...并且在SpringBoot项目的启动类中通过扫描来加载 4.5 启动测试 至此我们的集成操作就搞定了~启动服务来测试 访问:http://localhost:8082/flowable-ui 通过

    8.5K31

    开源身份认证神器:KeyCloak

    在方法中获得身份、角色等信息 很多场景下,我们希望在Controller中获得当前用户的主体信息,例如获取当前登录的用户名、角色等信息。此时该怎么办呢?...与Spring Cloud整合 经过上文的讲解,我们已实现Keycloak整合Spring Boot应用。那么,在一个使用Spring Cloud构建的分布式应用中,要如何整合Keycloak呢?...通过policy,您可实施基于属性的访问控制(attribute-based access control:ABAC),基于角色的访问控制(role-based access control:RBAC)...Keycloak利用policy的概念,以及如何通过提供聚合policy的概念来定义它们,您可以在其中构建“policy 中的 policy”,并仍然控制评估的行为。 ...一旦client收到ticket,它就可通过将ticket发送回authorization server来请求RPT(持有authorization数据的最后一个令牌)。

    5.9K20

    面试官:SSO单点登录和 OAuth2.0 有何区别?

    这种方法通过将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。...在这种模式下,第三方应用程序首先向授权服务器申请一个授权码,然后使用这个授权码向授权服务器请求访问令牌。一旦获得访问令牌,第三方应用程序就可以使用这个令牌访问用户授权的资源。...它主要关注授权和访问控制,允许用户授权第三方应用程序访问其资源。然而,通过与其他技术(如SSO)结合使用,OAuth2.0 可以实现单点登录的效果。...KeycloakKeycloak 是一个开源的身份和访问管理解决方案,它支持 OAuth2、OpenID Connect 和其他身份协议。...它通过独立的登录中心来实现这一目标,使用户只需在一个地方输入凭据即可访问所有相关应用程序和服务。

    42511

    Keycloak单点登录平台|技术雷达

    用一句官方语言来解释,“Keycloak为现代应用系统和服务提供开源的鉴权和授权访问控制管理”。...用户请求Service Provider(简称SP),通过SessionID判断是否存在已鉴权的Context,否则返回302,重定向至Identity Provider(简称IdP),并携带参数,IdP...另一种方式是针对提供RESTful API的服务,这种情况下必须使用OpenID Connect协议,这种协议建立在Auth2.0之上,所以,可以将access_token通过Http头的方式来获取权限信息...优点包括: 集群配置 应用轻量级 文档简洁全面 样式可完全自定义 丰富的第三方适配 样例丰富 配置版本化管理等 并且,所有操作提供RESTful接口,可简单的通过API接口进行配置。...缺点包括: 很多范例使用JSP、Servlet,对使用SpringBoot的用户不太友好; 导入导出配置仅可以在启动时设置,这个在使用Docker容器时,极其不友好; 授权访问配置导出尚存在Bug; 授权

    5.2K30

    使用服务网格增强安全性:Christian Posta探索Istio的功能

    Istio帮助使“服务网格”概念变得更加具体和可访问,随着Istio 1.0的最新发布,我们可以预期人们对它的兴趣会激增。...控制平面中的Istio的Citadel组件负责将证书和密钥获取到应用程序实例上。Citadel可以生成每个工作负载所需的证书和密钥来标识自己,并定期轮换证书,以便任何损坏的证书都有较短的寿命。...如果服务A被允许调用服务B来做一些事情(检查账户余额),但是用户X不能,我们如何验证和执行呢?...Istio可以帮助进行“起源”或“最终用户”JWT身份令牌验证。这是每个应用程序语言/框架组合过去不得不依赖库来处理验证和解包JWT令牌的另一个领域。...通过服务之间的交互以及源/最终用户之间的强大身份,我们可以编写一些非常强大的访问控制规则,以了解系统的行为方式。这个基金会为建立“零信任”网络铺平了道路。

    1.4K20

    SSO 单点登录和 OAuth2.0 有何区别?

    这种方法通过将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。...在这种模式下,第三方应用程序首先向授权服务器申请一个授权码,然后使用这个授权码向授权服务器请求访问令牌。一旦获得访问令牌,第三方应用程序就可以使用这个令牌访问用户授权的资源。...它主要关注授权和访问控制,允许用户授权第三方应用程序访问其资源。然而,通过与其他技术(如SSO)结合使用,OAuth2.0 可以实现单点登录的效果。...KeycloakKeycloak 是一个开源的身份和访问管理解决方案,它支持 OAuth2、OpenID Connect 和其他身份协议。...它通过独立的登录中心来实现这一目标,使用户只需在一个地方输入凭据即可访问所有相关应用程序和服务。

    53110

    Keycloak vs MaxKey,开源单点登录框架如何选择?

    单点登录(Single Sign On)简称为SSO,用户只需要登录认证中心一次就可以访问所有相互信任的应用系统,无需再次登录。...主要功能: 所有应用系统共享一个身份认证系统 所有应用系统能够识别和提取ticket信息 协议 用户中心系统作为服务端,肯定是要跟客户端进行对接来授权&获取用户信息的。...其宗旨基本一致:浏览器向客户端发起请求,客户端访问用户系统获取 Cookie 或其他认证条件,由用户系统负责登录并将认证后的条件返回给客户端。...LDAP Lightweight Directory Access Protocol,轻型目录访问协议。...主题也可以自定义,方式是通过编写 base 模板的 css 来实现。上图的主题是内置的keycloak主题。

    5.1K51

    适用于Java开发人员的微服务:管理安全性和机密

    好的方面来说,多种因素身份验证的不同方法虽然缓慢但肯定会得到越来越广泛的采用。 关于授权,基本上有两种流行的模型:基于角色的访问控制(也称为RBAC)和访问控制列表(ACL)。...OAuth 2.0授权框架使第三方应用程序可以通过协调资源所有者和HTTP服务之间的批准交互,或者通过允许第三方应用程序代表资源所有者来获得对HTTP服务的有限访问权,或者代表资源所有者。...代表自己获取访问权限。 – https://tools.ietf.org/html/rfc6749 OpenID Connect 1.0是基于OAuth 2.0协议的简单标识层。...Vault 可保护,存储并严格控制对令牌,密码,证书,API密钥和现代计算中其他机密的访问。...更进一步,让我们讨论gVisor,即容器运行时沙箱,它通过在运行时隔离容器来另一个角度看待安全性。 gVisor是一个用Go编写的用户空间内核,它实现了Linux系统表面的很大一部分。

    1.3K30
    领券