我如何为我的 API 定义两种访问令牌的策略,一种有身份(子),另一种没有?

How can I define policies for my API for two types of access tokens, one with an identity (sub) and one without?

我正在通过 ASPNET Core 使用 IdentityServer4,我希望用户通过 Web 浏览器通过他们的身份(隐式和混合)和客户端以编程方式(客户端凭据)访问我的 API。我意识到我所要做的就是添加 AddIdentityServerAuthentication,我就完成了。但是,这只解决了这个问题的身份验证方面,而不是授权。

授权:

使用 ASPNET Core,您可以只使用基于角色的身份验证(或类似的 PolicyServer 权限),但前提是您拥有具有角色声明的身份,不适用于客户端凭据。因此,这使我们需要按角色或策略和范围进行保护。我该怎么做?

我想我有一个工作的 POC,但我对它很不满意。 https://gist.github.com/VictorioBerra/8c333a228c55d86a7c15f7f300284634

它基本上涉及重新实现默认范围声明要求处理程序和策略服务器权限要求处理程序。但这是根据令牌类型有条件地应用需求处理程序的唯一方法。

至少有几种方法可以解决实施基于角色的身份验证的问题:

  • 您可能误解了客户端可以在 client_credentials 流程中拥有 role 个声明这一事实。
  • 如果您实施了 client_credentials_custom 流程并且基本上将客户端绑定到特定用户帐户(将其视为服务帐户),您甚至可以拥有 sub 声明