在我的架构中,我有几个需要相互通信的内部服务。我还有一个身份访问管理服务,它存储关于用户、角色和(粗粒度)权限的信息。
构成部分(并非详尽无遗):
与其让服务A和B通过IP白名单相互访问,我希望它们作为由IAM服务管理的用户运行。因此,服务需要一种询问对方角色和权限的方法。我考虑了以下方法:
我为运行服务的用户创建不透明的API密钥。我把它们储存在每一项服务上。当服务A调用服务B时,它传递其API密钥。然后,服务B调用IAM服务来验证密钥,并在处理请求之前获取关于服务A的角色的信息。服务B缓存来自IAM服务的响应,以减少聊天。
我见过涉及API网关的解决方案,但这假设流量来自网络之外。我不想仅仅为了将不透明的令牌转换为值JWT而将内部通信量重定向到外部。
发布于 2017-04-16 07:09:18
不透明的按值令牌实际上用于以下目的:
您是在一个内部网络,所以有效载荷大小不是一个大的问题,你可能不关心泄漏索赔给其他服务。如果您的声明不经常更改,那么可能不需要不透明的标记。这意味着您的服务只需要请求一个维护附带值的令牌来访问内部资源。
那还不算太糟。
如果您确实需要在每个请求中将by ref转换为by value,或者您希望为消费者简化auth循环,则最好采用代理方法。这将拦截对您的服务的请求,并将by令牌(或者可能是每个ref)替换为一个副产品令牌。这里的优点是,您可以更详细地控制附带值令牌的使用,并且您的客户不需要关心您的内部安全基础设施。
这种方法增加了更多的开销,以换取更多的控制。从你的内部服务部门打电话也可以。
我在博客上写了一些关于身份验证代理模式的文章。
https://stackoverflow.com/questions/43382402
复制相似问题