受信任的桌面客户端的客户端凭据流或授权代码流(带有PCKE)

问题描述 投票:0回答:1

我正在为几个API开发身份验证/授权体系结构。

我正在使用IdentityServer4作为安全令牌服务(STS)。

根据我从“ Dominick Baier”(构建IdentitySever4的人之一)中所读的内容,仅应使用两种类型的流

  • 客户端凭据流。 (机器对机器)
  • 授权码流+ PCKE。 (针对迭代用户)。

我有几个C#Web API,它们将与每个(机器到机器)通信,并且我将使用客户端凭据流。

但是随后有一些WPF桌面应用程序,将需要访问某些API,并且没有用户。应该使用哪个流量?

我读过:台式机/本机和移动应用程序应与授权代码流一起使用授权(与公共客户端和PKCE一起使用),因为它们托管在客户端,并且客户端/机密可能会泄漏(也许在台式机应用程序中,我们可以加密机密但是,然后将需要一种管理方式来存储解密该密钥的秘密?)

然后我读到:“只要您的系统不关心最终用户的身份(只需要对系统进行身份验证),请使用OAuth2客户端凭据授予。”

就目前而言,这是我的情况,我不关心最终用户的身份(但我可能会在不久的将来)。

因此,由于以上几点相互冲突:-我应该使用哪个流量?-我可以拥有使用客户端凭据流的桌面客户端并且安全吗?

此外,我已经阅读了一些有关相互TLS的信息,如果使用它,是否会更改应使用的流量?

c# authentication oauth-2.0 identityserver4 openid-connect
1个回答
0
投票

您不能信任客户端,因为您不能确定请求来自客户端。另一个问题是客户不擅长保密。但是有不同类型的客户端。

在通常具有单个任务的服务器上运行的客户端(例如同步与用户无关的数据)适合使用客户端凭据流。他们可以在某种程度上保守秘密(在服务器上运行)。

您可以为每个实例使用唯一的凭据,但这并不能使其更安全。它可以帮助您识别客户端,但不会增加安全性。安全涉及监视行为和检测异常。或者通过过滤IP地址来缩小访问范围。

但是您不限于使用您提到的两个流程。作为令牌提供者,您可以使用extension grants使用自定义流扩展IdentityServer。

没有用户,客户端凭据在某种程度上类似于资源所有者密码凭据(ROPC)流程(另一种选项已不再存在于授予类型文档中,但仍然存在,请参阅old docs)。从两者都可以自动化的意义上说,两者都不是真正安全的。由于这些流程不需要用户交互,因此可以消除用户因素。

但是我想知道为什么您的应用程序没有用户,而是在用户计算机上运行。因为理想情况下,您有一个客户端(无密码),用户可以在该客户端登录并让该客户端联系api(delegation)。

因此,有两件事:您需要识别客户吗?如果不是这样,您就可以使用ApiKey,例如Sendgrid。而且您永远无法信任客户。安全必须在服务器端。

因此,基本上没有关系,您无法采取任何措施使客户端更加安全。

© www.soinside.com 2019 - 2024. All rights reserved.