0

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

授权:

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

  • 你不能有多个政策,如果你这样做,它们都必须通过。
  • 您不能有多个身份验证方案,因为我的调用AddIdentityServerAuthentication必须使用相同的权限,那么 IdentityServer4.AccessTokenValidation/JwtBearer 如何知道您尝试通过哪个方案挑战?
  • 多个要求可能有效,但您需要在处理非身份访问令牌的情况下添加额外要求。您如何检测您正在处理的令牌类型?只说“如果没有子,这是客户信誉”是否安全。
  • 我应该放弃这个设计并强制我的用户使用设备代码流吗?看着az cli它神奇地打开一个浏览器,然后你就可以开始编写脚本,尽情享受。IS4 轻松支持这一点,尤其是verficationUrlComplete

我想我有一个有效的 POC,但我对此并不满意。https://gist.github.com/VictorioBerra/8c333a228c55d86a7c15f7f300284634

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

4

1 回答 1

0

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

  • 您可能误解了客户可以在流程中提出role索赔的事实。client_credentials
  • sub如果您实施client_credentials_custom流程并将客户端绑定到特定用户帐户(将其视为服务帐户),您甚至可以提出索赔
于 2019-05-04T10:05:49.983 回答