C# 可信桌面客户端的客户端凭据流或授权代码流(带PCKE)
我正在为几个API开发身份验证/授权体系结构 我使用IdentityServer4作为安全令牌服务(STS) 从我从“Dominick Baier”(创建IdentitySever4的人之一)中读到的内容来看,应该使用的流只有两种类型:C# 可信桌面客户端的客户端凭据流或授权代码流(带PCKE),c#,authentication,oauth-2.0,identityserver4,openid-connect,C#,Authentication,Oauth 2.0,Identityserver4,Openid Connect,我正在为几个API开发身份验证/授权体系结构 我使用IdentityServer4作为安全令牌服务(STS) 从我从“Dominick Baier”(创建IdentitySever4的人之一)中读到的内容来看,应该使用的流只有两种类型: 客户端凭据流。(机器对机器) 授权代码流+PCKE。(适用于有吸引力的用户) 我有几个C#Web API将与每一个(机器到机器)通信,我将使用客户机凭据流 但是还有一些WPF桌面应用程序,它们需要访问一些API,并且没有用户。 应该使用哪个流 我读过: 桌面
- 客户端凭据流。(机器对机器)
- 授权代码流+PCKE。(适用于有吸引力的用户)
另外,我已经读了一些关于相互TLS的内容,如果我使用它,这会改变我应该使用哪个流吗?您不能信任客户机,因为您不能确定请求是否来自客户机。另一个问题是客户不善于保守秘密。但是有不同类型的客户 在服务器上运行的客户机通常只有一个任务,如同步数据(与用户无关),适合使用客户机凭据流。在某种程度上,他们可以保守秘密(在服务器上运行) 您可以为每个实例使用唯一的凭据,但这并不能使其更安全。它可以帮助您识别客户端,但不会增加安全性。安全是关于监视行为和检测异常。或者通过过滤ip地址来缩小访问范围 但您不限于使用您提到的两个流。作为令牌提供者,您可以使用自定义流扩展IdentityServer 没有用户凭据时,客户端凭据与资源所有者密码凭据(ROPC)流有些类似(另一个选项,授权类型文档中不再介绍,但仍然存在,请参阅)。两者都不是真正安全的,因为两者都可以自动化。用户因素可以消除,因为这些流不需要用户交互 但我想知道为什么你的应用程序没有用户,运行在用户机器上。因为理想情况下,您有一个客户机(没有机密),用户可以在其中登录并让客户机联系api() 所以有两件事:你需要识别客户吗?如果没有,您可以使用ApiKey,例如Sendgrid。你永远不能信任客户。安全性必须是服务器端的
所以,基本上这并不重要,您无法使客户端更安全。您唯一能做的就是添加用户交互的需求。因此,现在您可能不需要它,但它将提高安全性,并允许您将api访问委托给客户端。您不能信任客户端,因为您无法确定请求是否来自客户端。另一个问题是客户不善于保守秘密。但是有不同类型的客户 在服务器上运行的客户机通常只有一个任务,如同步数据(与用户无关),适合使用客户机凭据流。在某种程度上,他们可以保守秘密(在服务器上运行) 您可以为每个实例使用唯一的凭据,但这并不能使其更安全。它可以帮助您识别客户端,但不会增加安全性。安全是关于监视行为和检测异常。或者通过过滤ip地址来缩小访问范围 但您不限于使用您提到的两个流。作为令牌提供者,您可以使用自定义流扩展IdentityServer 没有用户凭据时,客户端凭据与资源所有者密码凭据(ROPC)流有些类似(另一个选项,授权类型文档中不再介绍,但仍然存在,请参阅)。两者都不是真正安全的,因为两者都可以自动化。用户因素可以消除,因为这些流不需要用户交互 但我想知道为什么你的应用程序没有用户,运行在用户机器上。因为理想情况下,您有一个客户机(没有机密),用户可以在其中登录并让客户机联系api() 所以有两件事:你需要识别客户吗?如果没有,您可以使用ApiKey,例如Sendgrid。你永远不能信任客户。安全性必须是服务器端的
所以,基本上这并不重要,您无法使客户端更安全。您唯一能做的就是添加用户交互的需求。因此,现在您可能不需要它,但它将提高安全性,并允许您将api访问权委托给客户端。要添加到Ruard的非常好的答案中,并指向以下链接: 对于WPF桌面应用程序,标准技术是打开系统浏览器进行登录,然后在应用程序中接收响应。这有点棘手,但下面的IdentityModel代码示例演示了如何: