我要求在我的API中允许模拟(“充当”)。因此,具有相应权限的用户可以将API作为另一个用户进行操作。我想知道这个领域是否采用了一些具体的策略?
我可以创建一个端点来开始和结束模拟。开始模拟可能涉及获取用户及其权限并将其加载到内存中以获取当前请求,这很容易。后续请求呢?添加指示“模拟用户”的HTTP标头是不好的做法吗?如果该标头存在,请使用它来对后续请求进行授权?如何在UserId中使用cookie?还是其他信息?
是否有额外的好处(假设是.NET impl)将模拟用户分配给Thread.CurrentPrincipal?当前的权限和角色实现是自定义的,主要是使用位数组(尽管将来会有更改)。
答案 0 :(得分:4)
HTTP不包含对委托凭据/模拟的任何本机支持,因此HTTP基本身份验证与自定义标头的组合指示客户端尝试使用哪个其他用户就可以了。
但是,我会避免以“开始和结束模仿”的想法污染您的API。这意味着必须在API调用之间维护有状态的会话知识,这将使得在服务器端管理变得更加困难。
我只是让客户端在每次调用时传递所有必需的信息(他们的信用卡和模拟主体),并且每次针对被调用的资源验证它们。