首页 > 其他分享 >keycloak~scope客户端模板的使用

keycloak~scope客户端模板的使用

时间:2024-09-03 09:14:38浏览次数:12  
标签:String token scope keycloak public 模板 客户端

scope为何物?

scope在oauth2中表示授权的范围,另外也可以理解为,根据认证时scope的参数,在构建jwt时,返回更多的信息;比如在keycloak中,你的可选scope(optional scope)中添加了address这个模板,当你通过/auth/realms/{realmId}/protocol/openid-connect/token进行认证时,你的参数scope中出现address,那么在生成的jwt token中,就会出现address这个内容,如图:

这种按需求构建jwt的方法就是client scope最大的作用,下面我们具体来说一下步骤。

客户端模板功能汇总

  1. 在客户端模板中,可以看到所有的模板列表
  2. 可直接为所有新加的客户端添加默认模板(Default Client Scopes)
  3. 可以在模板配置中,选择可选模板,这个功能与认证参数scope配合使用,根据scope参数来扩展jwt token的内容
  4. 通过继承AbstractOIDCProtocolMapper来扩展客户端模板

配置客户端模板

模板列表,如图:

默认客户端模板,添加可选的scope,如图:

认证请求时,添加scope参数,如openid,address等

  • openid:在jwt中添加id_token相关信息,即存放用户的基本信息的token。
  • address:在jwt中添加address属性,通过解析user_attribute中的street,locality,region等信息,来扩展jwt token。

自定义客户端模板

例如,希望写一个扩展,在token中输出用户昵称,但这个昵称是有业务逻辑的,通过复杂的逻辑计算出一个用户昵称,这时,需要你自定义一个模板

  1. 定义一个ExtensionNicknameMapper
public class ExtensionNicknameMapper
    extends AbstractOIDCProtocolMapper
    implements OIDCAccessTokenMapper, OIDCIDTokenMapper, UserInfoTokenMapper {

  public static final String CONFIG_NAME = "extensionNickname";//配置里的名称
  public static final String PROVIDER_ID = "oidc-extension-nick-name-mapper";
  private static final List<ProviderConfigProperty> configProperties = new ArrayList<ProviderConfigProperty>();
  private static final String NICKNAME = "nickname";

  static {
    configProperties.add(createConfigProperty(CONFIG_NAME, "Token申请名", "在jwt中的属性名称,默认nickname"));
    OIDCAttributeMapperHelper.addIncludeInTokensConfig(configProperties, ExtensionNicknameMapper.class);
  }

  protected static ProviderConfigProperty createConfigProperty(String claimName, String label, String help) {
    ProviderConfigProperty property = new ProviderConfigProperty();
    property.setName(claimName);
    property.setLabel(label);
    property.setHelpText(help);
    property.setType(ProviderConfigProperty.STRING_TYPE);
    return property;
  }

  @Override
  protected void setClaim(IDToken token, ProtocolMapperModel mappingModel, UserSessionModel userSession,
                          KeycloakSession keycloakSession, ClientSessionContext clientSessionCtx) {
  
      String nickname="";
       // 复杂的业务方法,计算出nickname变量的值
      token.setOtherClaims(tokenAttribute, nickname);
  }

  public List<ProviderConfigProperty> getConfigProperties() {
    return configProperties;
  }

  @Override
  public String getId() {
    return PROVIDER_ID;
  }

  @Override
  public String getDisplayType() {
    return "Extension Nickname";
  }

  @Override
  public String getDisplayCategory() {
    return TOKEN_MAPPER_CATEGORY;
  }

  @Override
  public String getHelpText() {
    return "Maps Extension Nickname claim.";
  }

}

  1. 将ExtensionNicknameMapper添加到Jboss的SPI中
  • /resources/META-INF/services/org.keycloak.protocol.ProtocolMapper文件
your.package.ExtensionNicknameMapper
  1. 在keycloak管理后台,添加一个新的模板,然后在模板里的mapper选项卡中,添加一个新的mapper中选你的ExtensionNicknameMapper

好了,到这里,keycloak的client scope(客户端模板)就介绍完了,希望对各位有所帮助。

标签:String,token,scope,keycloak,public,模板,客户端
From: https://www.cnblogs.com/lori/p/18393899

相关文章

  • NetSarang Xshell(SSH客户端软件) v7.0.0169 中文绿色版
    概述NetSarangXshell破解版是一款免费SSH客户端软件的Linux远程监控工具.Xshell中文版,轻松管理远程主机服务器,会话管理器,支持多选项卡管理主机.Xftp7最新版以及Xshell7最新版支持远程协议Telnet,Rlogin,SSH/SSHPKCS#11,SFTP,Serial,具有Unicode编码支持,动态端口转发,自定......
  • Steamui.dll守护指南:Steam客户端遭遇迷失时的自助恢复之旅
    Steamui.dll丢失应该如何处理?很多朋友还不是特别的清楚,解决Steamui.dll丢失的问题,可以按照以下步骤操作:1.重新安装Steam客户端:最直接的方法是卸载当前的Steam客户端,然后从官方网站重新下载安装包进行安装。这会自动替换所有丢失或损坏的文件,包括Steamui.dll。2.文件恢复:若......
  • golang使用http客户端 多个协程同时请求接口
    packagemainimport( "encoding/json" "fmt" "io" "net/http" "net/url" "sync")typeApiResponsestruct{ Codeint`json:"code"` Msgstring`json:"msg&qu......
  • 神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
    本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析-1。● ClkLog客户遇到的问题ClkLog的用户访问基础统计分析功能是基于神策SDK的全埋点来实现的。我们遇到有些客户是使用C++、C#等语言来开发的客户端,然而神策此类SDK(如C++,C#等)仅提供自定义事件埋点,并未......
  • 神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
    本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析-1。● ClkLog客户遇到的问题ClkLog的用户访问基础统计分析功能是基于神策SDK的全埋点来实现的。我们遇到有些客户是使用C++、C#等语言来开发的客户端,然而神策此类SDK(如C++,C#等)仅提供自定义事件埋点,并未......
  • 【QA-MISRA】在客户端如何修改当前用户的密码
    【更多软件使用问题请点击亿道电子官方网站】无法登录QAMISRAController的情况下如何修改当前用户的密码问题1、文档目标解决无法登录QAMISRAController的情况下如何修改当前用户的密码问题。2、问题场景由于客户实行集中式管理,QA-MISRAController开发人员无权登录......
  • EventSource事件流(允许网页与服务器之间建立一个持久的连接,服务器可以通过这个连接向
     EventSource是JavaScript中用于处理服务器发送事件(Server-SentEvents,SSE)的接口。它允许网页与服务器之间建立一个持久的连接,服务器可以通过这个连接向客户端推送更新。EventSource通常用于需要实时更新数据的场景,比如实时通知、股票价格更新等。 基本用法//创建一......
  • Eureka与Ribbon的协作:实现客户端负载均衡的详细指南
    Eureka与Ribbon的协作:实现客户端负载均衡的详细指南引言在现代微服务架构中,负载均衡是保证系统高可用性和性能的重要技术之一。随着服务实例的数量和动态变化,如何高效地分发请求成为一个关键问题。SpringCloud提供了Eureka和Ribbon这两项强大的工具,Eureka负责服务发现,而R......
  • 【Rust光年纪】解锁Rust开发新姿势:数据库客户端和搜索引擎库探秘
    用Rust打造高效应用:数据库客户端与搜索引擎库全攻略前言随着Rust语言的不断发展,越来越多的优秀库和工具涌现出来,为开发者提供了更多选择和便利。本文将介绍几个用于Rust语言的数据库客户端和搜索引擎库,它们在不同领域都展现出了强大的功能和灵活的应用场景。欢迎订阅专......
  • 创建一个用于修改本地DNS解析记录的Windows客户端
    在许多场景下,我们可能需要手动修改本地的DNS解析记录,以便将特定的域名解析到指定的IP地址上。例如,在开发和测试环境中,我们可能希望将某些域名指向本地服务器,而不依赖于公共DNS服务。为此,Windows系统中的hosts文件就可以派上用场。然而,手动编辑hosts文件可能会比较麻烦,......