Asp.net 使用JWT模拟

Asp.net 使用JWT模拟,asp.net,oauth-2.0,jwt,Asp.net,Oauth 2.0,Jwt,我正试图基于此实现JWT授权。 我还需要让特定用户(管理员)模拟其他用户(客户端) 我在这里看到两种可能性: 使用管理令牌发出管理请求,并将模拟客户端id添加到每个请求中 为管理员请求一个新的令牌,该令牌将在其有效负载中包含客户端的用户名和角色,因此它基本上将成为客户端令牌,但它还将有两个额外字段:“impersonated=true”和“impersonator\u admin\u id=x” 我更喜欢第二个,因为在客户端角色中使用.net内置授权属性更容易。 但我不确定这是否会打开安全漏

我正试图基于此实现JWT授权。 我还需要让特定用户(管理员)模拟其他用户(客户端)

我在这里看到两种可能性:

  • 使用管理令牌发出管理请求,并将模拟客户端id添加到每个请求中
  • 为管理员请求一个新的令牌,该令牌将在其有效负载中包含客户端的用户名和角色,因此它基本上将成为客户端令牌,但它还将有两个额外字段:“impersonated=true”和“impersonator\u admin\u id=x”
我更喜欢第二个,因为在客户端角色中使用.net内置授权属性更容易。
但我不确定这是否会打开安全漏洞,或者它是否可以使用.Net的OAuthAuthorizationServer实际实现。

模拟总是会带来严重的安全隐患,因为它允许“成为其他人”

因此,您需要确保通过引入强化审核日志记录等方式尽可能使此状态可见。此外(为了区分真实登录和模拟登录),您希望能够在JWT访问令牌中传输有关此特殊状态的信息,例如,向模拟用户的配置文件添加其他模拟和模拟属性(如第二点中所述)

最后,您可能会有一个常规的API端点,除了这样的请求

POST https://YOUR_DOMAIN/users/{user_id}/impersonate
Content-Type:   'application/json'
Authorization:  'Bearer {ACCESS_TOKEN}'
{
  impersonator_id: "IMPERSONATOR_ID"
}

。。。这将分发特定的模拟令牌,允许“通过用户的眼睛”使用服务。首先,从您的链接中确定管理员是在模拟用户还是代表用户。请注意,代表!=模仿

  • 当A维护自己的身份并从B获得所有权利时,A代表B行事

  • 当出于所有目的A是B时,A模拟B

在本发明中,未定义用于此目的的任何特定权利要求。在本文中,作者建议包括一项代表海外建筑运营管理局的索赔

{"obo": {
    "prn":"mailto:joe@example.com",
    "ctx":["urn:adatum.com:calendar"]
}}
  • prn
    标识联合工作组持有人代表的委托人

  • ctx
    建立允许持证人代表委托人行事的权限上下文。这一要求应是强制性的,以限制行使委托权利的环境

请注意,
海外建筑运营管理局
的索赔不包括在合同中,因此应将其作为建议。OpenID中也有类似的声明
azp
,但不清楚如何应用它

  • azp
    :授权方-向其颁发ID令牌的一方
在回答您的问题时,在第一种情况下,我认为您所说的是代表,因此包括客户机id和安全上下文。第二种情况是模仿