基于域的微服务授权和可重用服务

时间:2017-10-10 22:33:44

标签: api permissions authorization microservices

我正在运行基于微服务的无服务器架构,并围绕中央授权服务的主体进行构建,该服务由所有其他微服务调用。对于信息在调用服务之前,验证由拦截器处理。

为了这个问题,我有以下微服务

source_file.cpp:18:17: error: invalid range expression of type 'const char *'; no viable 'begin' function available
    for (auto c : text)
                ^ ~~~~
1 error generated.

如果用户呼叫汽车服务并查找汽车123.汽车微服务将首先致电授权服务以检查是否允许用户查看汽车123,如果是,汽车微服务将汽车返回到用户。 类似地,如果用户询问关于汽车123的任何评论,它将呼叫评论服务,该评论服务反过来将首先呼叫授权服务以检查用户对汽车123的访问,然后返回该汽车的适当评论。

基于我一直在做的一些阅读(https://groups.google.com/forum/#!topic/microservices/n_jL3atxPhQ)我相信对于对象级权限,在各自的api中嵌入授权可能更有用,因此保留所有对象和&该服务中域的权限信息。

当可重用的微服务在所有域中提供功能时,我不确定该怎么做,例如评论,文件活动

方法1:

船和汽车服务处理他们自己的授权。评论服务需要呼叫船或汽车服务处理授权

/boats
/cars
/comments
/authorization

方法2:

Boats and Cars服务处理他们自己的授权,并将代理请求(带有适当的声明标题)发送到内部唯一的评论微服务。除了检查标题中的声明之外,评论不需要处理授权。

/boats
/cars
/comments

这些常见甚至是有效的方法吗? 如果是这样,在评论等许多其他可重用服务的情况下使用什么更好的模式?

1 个答案:

答案 0 :(得分:0)

我认为将策略决策/授权分解为单独服务的决定取决于您在策略要求中有多少跨服务,通用,全局和/或上下文策略。例如,如果所有权比较为'许可,如果user.id == vehicle.owner'这可以应用于汽车和船只,这是一个规则,您只能在一个地方使用合并的政策进行管理。当你开始添加上下文时,如果风险>温和'则拒绝。或防止混淆的代理人如果sub == vehicle.resourceOwner'或者“如果user.goodStanding!= true,那么......”如果汽车和船只政策是完全独立的,只要你不在每个服务中,它就可以了。计划随着时间的推移增加功能。

此致

马特

相关问题