qidao123.com技术社区-IT企服评测·应用市场

标题: keycloak~scope客户端模板的利用 [打印本页]

作者: 笑看天下无敌手    时间: 2024-9-3 07:42
标题: keycloak~scope客户端模板的利用
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最大的作用,下面我们具体来说一下步调。
客户端模板功能汇总

配置客户端模板

模板列表,如图:

默认客户端模板和可选客户端模板
可选客户端模板,可以添加address,openid来对原有jwt举行扩展,如图:

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

自定义客户端模板

例如,盼望写一个扩展,在token中输出用户昵称,但这个昵称是有业务逻辑的,通过复杂的逻辑计算出一个用户昵称,这时,需要你自定义一个模板
  1. public class ExtensionNicknameMapper
  2.     extends AbstractOIDCProtocolMapper
  3.     implements OIDCAccessTokenMapper, OIDCIDTokenMapper, UserInfoTokenMapper {
  4.   public static final String CONFIG_NAME = "extensionNickname";//配置里的名称
  5.   public static final String PROVIDER_ID = "oidc-extension-nick-name-mapper";
  6.   private static final List<ProviderConfigProperty> configProperties = new ArrayList<ProviderConfigProperty>();
  7.   private static final String NICKNAME = "nickname";
  8.   static {
  9.     configProperties.add(createConfigProperty(CONFIG_NAME, "Token申请名", "在jwt中的属性名称,默认nickname"));
  10.     OIDCAttributeMapperHelper.addIncludeInTokensConfig(configProperties, ExtensionNicknameMapper.class);
  11.   }
  12.   protected static ProviderConfigProperty createConfigProperty(String claimName, String label, String help) {
  13.     ProviderConfigProperty property = new ProviderConfigProperty();
  14.     property.setName(claimName);
  15.     property.setLabel(label);
  16.     property.setHelpText(help);
  17.     property.setType(ProviderConfigProperty.STRING_TYPE);
  18.     return property;
  19.   }
  20.   @Override
  21.   protected void setClaim(IDToken token, ProtocolMapperModel mappingModel, UserSessionModel userSession,
  22.                           KeycloakSession keycloakSession, ClientSessionContext clientSessionCtx) {
  23.   
  24.       String nickname="";
  25.        // 复杂的业务方法,计算出nickname变量的值
  26.       token.setOtherClaims(tokenAttribute, nickname);
  27.   }
  28.   public List<ProviderConfigProperty> getConfigProperties() {
  29.     return configProperties;
  30.   }
  31.   @Override
  32.   public String getId() {
  33.     return PROVIDER_ID;
  34.   }
  35.   @Override
  36.   public String getDisplayType() {
  37.     return "Extension Nickname";
  38.   }
  39.   @Override
  40.   public String getDisplayCategory() {
  41.     return TOKEN_MAPPER_CATEGORY;
  42.   }
  43.   @Override
  44.   public String getHelpText() {
  45.     return "Maps Extension Nickname claim.";
  46.   }
  47. }
复制代码

  1. your.package.ExtensionNicknameMapper
复制代码
好了,到这里,keycloak的client scope(客户端模板)就介绍完了,盼望对各位有所资助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4