keycloak~巧用client-scope实现token字段和userinfo接口的授权

keycloak中的client-scope允许你为每个客户端分配scope,而scope就是授权范围,它直接影响了token中的内容,及userinfo端点可以获取到的用户信息,这块我们可以通过自定义scope/mapper,来实现粒度的控制,并且这个mapper可以控制添加到token,或者添加到userinfo端点,这两块配置也是独立的,下面我们通过一个登录IP地址的mapper,来实现将登录ip添加到token和userinfo端点。

添加Mapper对象

```
public class ExtensionLoginIpMapper
        extends AbstractOIDCProtocolMapper
        implements OIDCAccessTokenMapper, OIDCIDTokenMapper, UserInfoTokenMapper {
    public static final String CONFIG_NAME = "ExtensionLoginIp";//配置里的名称
    public static final String PROVIDER_ID = "oidc-extension-login-ip-mapper";
    private static final List configProperties = new ArrayList();
    private static final String LOGIN_IP = "loginIp";

    static {
        configProperties.add(createConfigProperty(CONFIG_NAME, "Token申请名", "在jwt中的属性名称,默认loginIp"));
        OIDCAttributeMapperHelper.addIncludeInTokensConfig(configProperties, ExtensionLoginIpMapper.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) {
        try {
            String key = LOGIN_IP;
            if (mappingModel.getConfig().containsKey(CONFIG_NAME)) {
                key = mappingModel.getConfig().get(CONFIG_NAME);
            }

            if (userSession.getNotes().containsKey(LOGIN_IP)) {
                String val = userSession.getNote(LOGIN_IP);
                token.setOtherClaims(key, val);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List getConfigProperties() {
        return configProperties;
    }

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

    @Override
    public String getDisplayType() {
        return CONFIG_NAME;
    }

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

    @Override
    public String getHelpText() {
        return "Maps Extension Login Ip Address.";
    }
}
```

将Mapper添加到Client Scope

  • 添加 client scope

keycloak~巧用client-scope实现token字段和userinfo接口的授权

  • 在client scope中添加mapper

keycloak~巧用client-scope实现token字段和userinfo接口的授权

设置access_token可见和userinfo可见

  • Add to ID token
  • Add to access token
  • Add to access token

keycloak~巧用client-scope实现token字段和userinfo接口的授权

为客户端指定scope

  • 这对于根据客户端来控制token和userinfo端点是非常必要的功能
  • 这是oauth2授权的重要组成部分

keycloak~巧用client-scope实现token字段和userinfo接口的授权

通过oauth2中的密码认证时的注意点

  • 客户端不能是同意必选的,这种客户端需要通过浏览器认证,由用户自己确认它公开的信息

keycloak~巧用client-scope实现token字段和userinfo接口的授权

keycloak~巧用client-scope实现token字段和userinfo接口的授权

通过token获取用户信息

  • userinfo端点:/auth/realms/{realms}/protocol/openid-connect/userinfo
  • 获取到时的用户信息中的字段,是通过scope来控制的

keycloak~巧用client-scope实现token字段和userinfo接口的授权

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/6654.html

(0)
LomuLomu
上一篇 2025 年 1 月 16 日 上午2:55
下一篇 2025 年 1 月 16 日 上午3:56

相关推荐

  • Python 潮流周刊#85:让 AI 帮你写出更好的代码(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 分享了 12 篇文章,12 个开源项目,1 则音视频,全文 2300 字。 以下是本期摘要: 🦄文章&教程 ① 如果一直要求 LLM “写出更…

    未分类 2025 年 1 月 13 日
    43900
  • Java毕业设计选题:325基于SSM+Jsp的高校学生社团管理系统

    开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 系统展示 系统首页 用户注册 用户登录 后台首页 社团公告 留言信息 社团活动 摘要 校园…

    2024 年 12 月 28 日
    46700
  • 万字图文:SaaS业务架构、价值流、业务能力、业务流程、业务对象、组织架构

    大家好,我是汤师爷~ 本文为读者提供一个SaaS业务架构的系统性框架,探讨业务架构分析的核心要素,帮助SaaS企业深入剖析目标客户的业务模式,全面理解他们的业务架构。 无论你是SaaS创业者、产品经理还是架构师,本文内容都将为你的系统设计和决策提供帮助。 1 目标与步骤 SaaS业务架构需要区分两种视角:SaaS企业自身的业务架构、SaaS服务客户的业务架构…

    2025 年 1 月 14 日
    41800
  • PyCharm最新2024永久激活码,PyCharm破解教程(Pycharm插件推荐)

    PyCharm是JetBrains公司开发的一款广受欢迎的Python集成开发环境(IDE),以其强大的功能和智能化的操作界面受到广大Python开发者的青睐。 给大家整理了PyCharm永久激活码,PyCharm破解教程,需要的直接浏览器访问: docs.qq.com/doc/DWHB5YUV6UVRWd0ZR PyCharm不仅内置了丰富的功能,还支持各…

    未分类 2024 年 7 月 31 日
    3.6K00
  • Redis Java 集成到 Spring Boot

    Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Redis 📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。 Redis Java 集成到 Spring Boot 一、使用 Spring Boot 连接 Redis 单机 1.创…

    2024 年 12 月 28 日
    23600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信