我使用微服务架构。每个服务都使用承载访问类型。用户通过公共服务获得令牌。每种服务都是业务应用,具有自己的优势。Rabbit mq用作进程间通信。Keycloak通过JWT为每个服务传输用户角色。但我想在用户的令牌中转移用户的privelegies。
像这样:
priveleges:[
{resource: subjects,
roles:[ADMIN,OPER,COMPLAINCE],
categories:[
read:[1,2,3,4,5],
write:[3,4,5],
delete:[3,4,5]
],
notes:[
read:[1,2,3,4,5],
write:[3,4,5],
delete:[3,4,5]
],
subject:[
read:true,
write:true,
delete:false
],
addresses:[
read:true,
write:true,
delete:false
]
},
{resource: cards,
roles:[ADMIN,OPER,COMPLAINCE],
card:[
read:true,
write:true,
delete:false
],
fin-operation:[1,2,3,4,5],
non-fin-operation:[1,2,3,4]
}
]
我有两个问题:
{ "priveleges":[ { "resource":"subjects", "roles":[ "ADMIN", "OPER", "COMPLAINCE" ], "categories":[ { "read":[ 1, 2, 3, 8, 5 ] }, { "write":[ 3, 9, 5 ] }, { "delete":[ 3, 6, 5 ] } ], "notes":[ { "read":[ 1, 2, 3, 7, 5 ] }, { "write":[ 3, 4, 5 ] }, { "delete":[ 3, 4, 5 ] } ] }, { "resource":"cards", "roles":[ "ADMIN", "OPER", "COMPLAINCE" ], "fin-operation":[ 1, 2, 3, 4, 5 ], "non-fin-operation":[ 1, 2, 3, 4 ] } ] }
我可以在keycloak中为每个用户设置不同的特权吗?我知道在KeyCloak中使用带有硬编码映射器类型的ProtocolMapper是可能的。在这种情况下,它将为所有用户提供一个,但我需要为每个用户提供privelegies声明。
如果我正确理解“特权”的意思,您至少可以通过以下两种方式实现它:1)相应地创建并分配领域角色
给用户,并在每个用户上创建自定义的用户属性
。或者,您可以使用Keycloak授权特性来处理这个问题,但这需要一些工作。
在令牌中传递特权,以便以后可以在后端和前端处理这些特权,这是正确的吗?
是的,通常使用Keycloak进行身份验证,并使用后端根据为某个用户请求的令牌注入的角色来执行授权部分。
让我给大家提供一个说明性的例子。首先通过转到以下位置创建领域角色:
将选项卡切换到角色映射;
现在转到属性;
将其余的声明添加到用户中。例如,键=“PriveLeges”
和值={“资源”:“主题”,“类别”:[{“读取”:[1,2,3,8,5]},{“写入”:[3,9,5]},{“删除”:[3,6,5]},“注释”:[{“读取”:[1,2,3,7,5]},{“写入”:[3,4,5]},{“删除”:[3,4,5]}。
要完成此操作,您需要创建一个映射器
来将新创建的用户属性
映射到令牌中。为此,请转到:
名称
:“priveleges”映射器类型
选择“用户属性”;用户属性
:priveLeges;令牌声明名称
:priveLeges;声明JSON类型
:JSON
;现在代表用户向客户端请求一个令牌。解码后的令牌将如下所示:
"iat": ......,
"jti": "......",
"iss": "......",
"aud": "......",
"sub": "......",
"typ": "......",
"azp": "......",
"session_state": "......",
"acr": "1",
"allowed-origins": [
"http://localhost:8080"
],
"realm_access": {
"roles": [
"COMPLAINCE",
"offline_access",
"uma_authorization",
"ADMIN",
"OPER",
"app-user"
]
},
"resource_access": {
"springboot-microservice": {
"roles": [
"user"
]
},
"account": {
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
"scope": "profile email",
"email_verified": true,
"priveleges": {
"resource": "subjects",
"categories": [
{
"read": [
1,
2,
3,
8,
5
]
},
{
"write": [
3,
9,
5
]
},
{
"delete": [
3,
6,
5
]
}
],
"notes": [
{
"read": [
1,
2,
3,
7,
5
]
},
{
"write": [
3,
4,
5
]
},
{
"delete": [
3,
4,
5
]
}
]
},
"name": "e 1",
"preferred_username": "employee1",
"given_name": "e",
"family_name": "1",
}
"realm_access": {
"roles": [
"COMPLAINCE",
"offline_access",
"uma_authorization",
"ADMIN",
"OPER",
"app-user"
]
我有一个系统,作为第三方的API。我需要观察每个第三方的响应时间。但正如普罗米修斯在其文档中所定义的: 请记住,键值标签对的每一个唯一组合都表示一个新的时间序列,这会显著增加存储的数据量。不要使用标签存储基数高的维度(许多不同的标签值),如用户ID、电子邮件地址或其他无界值集。 http_3rdParty1_requests_total http_3rdParty2_requests_total.
我希望能够使用Micronaut的声明性客户端,根据我是在本地开发环境还是在生产环境中,找到不同的endpoint。 我在中设置客户端的基本uri: 阅读来自Micronaut的文档,他们让开发人员跳过了相当多的障碍,将动态值输入到实际客户端。它们实际上很混乱。所以我创建了这样的配置: 但是正如您所看到的,这实际上并不是从中读取任何值,它只是将const值设置为类的静态值。我希望值根据我所处的环境
在Xcode中,在项目级别,我有以下设置:Xcode设置禁止不推荐使用的函数警告 这将-Wno-deprecated-declarations添加到编译中,我可以从报告导航器中验证这一点。同样,当我尝试使用一个不推荐使用的函数时,也不会出现警告。 我想在单个文件中禁止显示此警告,因此我使用#pragma,如下所示; 此代码给出以下编译错误;错误:未知警告组“-Wno deprecated decl
我最近从Nordic SemiConductor导入了一个项目,现在我从头创建的任何项目在每个文件中都有版权声明: /**版权所有(c)2015年,北欧半导体...............................................*/ 然后我转到文件>其他设置>默认设置,设置是:没有版权声明。 我完全迷失在如何消除我的项目这一声明,并将感谢任何帮助。
问题内容: 我有一个Web应用程序,并且我想为每个用户使用不同的日志,因此我可以了解该用户在系统上所做的事情的“历史记录”。 这是我到目前为止所拥有的: 问题是,作为Web应用程序,它是多线程的,所以AFAIK我不能一直使用并根据我要登录的用户来更改附加程序。我认为我应该为每个用户创建不同的内容,但这是正确的吗? 问题答案: 尝试切换到logback(log4j的后继者)。它带有一个Sifting
问题内容: 如果我有一个具有以下结构和数据的表: 我将使用哪种查询来获得以下结果(随后的说明): 如你看到的: 每个仅返回一行。 最高的那一行是返回的那一行。 是否有一种 无需 使用子查询即可完成此操作的方法?该程序经过的关系代数术语中是否有名称? 问题答案: 该查询称为逐组最大值,它(至少在MySQL中)可以通过子查询实现。例如: 在sqlfiddle上看到它。