4

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

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

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

4

1 回答 1

6

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

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

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

于 2012-10-04T05:34:33.987 回答