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

如何从外部IDP读取/导入角色到Keycloak

艾嘉石
2023-03-14
  • 名为central的领域,具有角色centralwebuser和客户端SpringWeb。客户已经
    • 访问类型:public并且只启用了一个流,即standard flow enabled
    • 有效重定向URI:http://localhost:8000/*
    • 名为SpringUser用户,其域角色为Webuser
    • 客户端spring_brokering仅将standard Flow enabled设置为ON,valid Redirect URI:http://localhost:8080/*,以及access type:failition

    第二个领域是第一个领域的国内流离失所者。因此,要登录,用户可以转到中心登录页面,并选择IDPSpringAppIDP

    IDP配置如下:

    • 别名:springappidp,除了启用选项
    • 外,其他都 关闭
    • 授权URL、令牌URL等设置为来自SpringAppendpoint的URL(例如授权URL:http://127.0.0.1:8080/auth/realms/springapp/protocol/openid-connect/auth)
    • 客户端ID和客户端秘密分别是spring_brokering及其秘密。
    server.port                         = 8000
    keycloak.realm                      = Central
    keycloak.auth-server-url            = http://localhost:8080/auth
    keycloak.ssl-required               = external
    keycloak.resource                   = SpringWeb
    keycloak.public-client=true
    
    keycloak.security-constraints[0].authRoles[0]=WebUser
    keycloak.security-constraints[0].securityCollections[0].patterns[0]=/services/*
    

    有趣的是,如果在第一个领域中,我创建一个标识提供程序映射器外部角色到角色(在IDPSpringAppIDP配置中),将Webuser的外部角色映射到CentralWebuser并将spring属性更改为:

    keycloak.security-constraints[0].authRoles[0]=CentralWebUser
    keycloak.security-constraints[0].securityCollections[0].patterns[0]=/services/*
    

    我能够登录,这意味着Keycloak知道用户拥有Webuser角色,因此将该角色映射到CentralWebuser角色。

    我想知道是否可以将角色从外部IDP显式导入到内部IDP中?或者,我是否(以及如何)代表用户请求一个令牌,该令牌将具有来自centralSpringWeb领域的用户角色,而不必为每个用户角色显式创建角色映射器。

共有1个答案

袁华清
2023-03-14

我想知道是否可以将角色从外部IDP显式导入到内部IDP中?或者我是否(以及如何)代表用户请求一个令牌,该令牌将在该令牌中拥有来自Central和SpringWeb领域的用户角色,而不必为每个用户角色显式创建角色映射器。

如果不显式地为每个用户角色创建角色映射器,我找到的唯一解决方案是扩展Keycloak代码;这也带来了明显的负面影响。

回想起来,Keycloak没有提供一种开箱即用的方法来自动从外部IDP导入所有角色,这实际上是有意义的。例如,如果我使用Google作为外部IDP,为什么我的内部IDP(即Keycloak)要关心Google使用的角色的确切名称?!。最有可能的是,这些角色对于内部IDP来说没有意义,当它们有意义时,它们可能有不同的名称。无论如何,对于这些异常,可以使用角色映射器特性。

ROLE A | ROLE B
....

使用脚本,我读取具有角色之间映射的文件,并使用Keycloak Admin REST API创建角色、映射器等。

我使用的逻辑如下:

  • 如果该角色不存在于外部IDP中,我只是跳过并假定这是一个错误;
  • 如果该角色不存在于内部IDP中,我将其创建为一个领域角色;为此,我使用endpointpost/{realm}/roles
  • 最后,我使用endpointpost/{realm}/identity-provider/instances/{alias}/mappers创建角色映射器,其中包含JSON模板角色映射器文件的内容(相应地替换了其标记)。
 类似资料:
  • 问题内容: 我正在使用webpack来管理我的React应用程序。现在,我想从此URL导入依赖项: 传统上,我只是将上述代码放在index.html文件中。但是现在如何让webpack加载此网址?以及我的React JS如何使用该依赖关系? 当我启动webpack-dev-server时,将出现以下错误: 然后,我使用一点加载程序来加载URL。以下是使用加载程序的JavaScript代码: 但是启

  • 在eclipse中,我们可以将jar文件的元素导入调色板,并在设计GUI时使用它们。我想知道我们是否可以在任何逻辑中做同样的事情? 我已经向模型的依赖项添加了一个java库(例如JCalenders)。我试图使用调色板视图中的“管理库”选项将其添加为库对象类。当我添加Jar文件时,它给我这个错误: 打开库时出错:库格式无效。缺少库描述。 有没有办法修复这个错误?如果没有,我如何在我的模型中使用外部

  • 我正在开发一款需要服务器的android游戏。我们设置了一个git,其中有三个文件夹:客户端、服务器和共享: 客户端包含Android Studio项目。服务器包含一个Eclipse项目,它是我们的服务器和数据库。Shared包含我想在Eclipse和Android Studio项目中使用的java类。 在Eclipse中,我通过将文件导入为“文件系统”,成功地从共享中加载了文件。(它创建了一个包

  • 我正在运行KeyCloak,并且我已经使用OIDC集成了Azure AD身份提供程序。 当我尝试获取我创建的自定义领域的令牌时,只有在提供在 KeyCloak 中创建的用户名和密码时,我才能获取令牌。如果我使用 ADFS uid/pwd,我会得到以下响应。 我提出的开机自检请求如下: https:// 我正在请求标头中传递以下信息 谢谢Sateesh

  • 我尝试导入commons-io-2.6。jar和commons-lang-2.6。将jar(此处可用)转换为处理草图。 我将这些JAR放在位于处理根目录下的libraries文件夹中,但处理无法识别我的导入: 如何在处理过程中导入像Apache这样的外部jar?

  • 我试图理解jshell,却摸索着导入外部库。到目前为止,我还看不到对此的任何建议/解决方案。 有人能告诉我,如果已经解决了这个问题。