为 RESTful API 寻找身份验证/模拟策略

can*_*rer 4 asp.net rest asp.net-mvc-3

我要求在我的 API 中允许模拟(“充当”)。因此,具有适当权限的用户可以作为其他用户使用 API。我想知道在这个领域是否采用了一些特定的策略?

我可以创建一个端点来开始和结束模拟。开始模拟可能涉及获取用户及其权限并将它们加载到当前请求的内存中,这很容易。后续的请求呢?添加指示“模拟用户”的 HTTP 标头是不好的做法吗?如果该标头存在,使用它对后续请求进行身份验证?使用带有该 UserId 的 cookie 怎么样?或者附加信息?

将模拟用户分配给 Thread.CurrentPrincipal 是否有额外的好处(假设是 .NET impl)?当前的权限和角色实现是自定义的,本质上使用了一个位数组(尽管这在将来会发生变化)。

Bri*_*lly 6

HTTP 不包括对委托凭据/模拟的任何本机支持,因此将 HTTP 基本身份验证与自定义标头相结合,指示客户端尝试充当哪个其他用户就可以了。

但是,我会避免以“开始和结束模拟”的想法来污染您的 API。这意味着必须在 API 调用之间维护有状态的会话知识,并且会使服务器端的管理变得更加困难。

我只会让客户端在每次调用时传递所有必需的信息(他们的凭据和模拟主体),并每次针对被调用的资源验证它们。