【问题标题】:Securing .Net Core Web API using Authorization Code flow with PKCE使用授权代码流和 PKCE 保护 .Net Core Web API
【发布时间】:2021-04-29 16:46:41
【问题描述】:

我有一个位于公司网络中的 .Net 核心 Web API,它是一个独立的服务,将被网络中的其他应用程序使用。 Web API 非常简单,端点很少。但是,我想限制对此 Web API 的访问。仅允许给定的应用程序集访问此 Web API。在我们公司内部,我们有充当身份提供者服务器的身份验证和授权服务,我们必须使用此服务来获取访问令牌等。我们无法创建自己的身份服务器来生成令牌。在我们的设计阶段,我们确定使用 PKCE 的授权代码流将是一种理想的实现方式。

我们的身份提供者已经登录了一个测试客户端 ID 并使用 PKCE 配置了身份验证代码流,之后当我配置 .net 核心 web api 时,我意识到我们需要为用户登录提供一个重定向 url,这是混淆点因为这是一个 web api,没有登录页面。我想说的是,当我们在 Auth 代码流程的第一步中获取授权代码时,我不清楚重定向将如何工作,因为没有登录页面可以在 Web API 中重定向,我的意思是在获取身份验证代码时,必须提供重定向 uri,用户将在其中输入用户 ID 并通过,但这是一个 Web API,没有用户/密码,只有另一个客户端应用程序尝试使用客户端 ID 访问。所以我的问题是如何在 Web API 环境中使用 OIDC PKCE,我确信这是可能的,但我没有找到任何相关文档。任何 .Net 核心代码示例将不胜感激。不,我们不能使用 Client Secret 或隐式工作流。

期待您的回复。

谢谢。

【问题讨论】:

  • 谁能帮忙?

标签: .net api oauth openid-connect pkce


【解决方案1】:

为什么不直接使用通过 PKCE 流从您的客户端获得的不记名令牌并在 API 上验证它作为身份验证中间件的一部分来进行身份验证?

【讨论】:

  • 这就是我们正在做的,但是在初始请求身份验证代码请求中,我们需要提供重定向 uri,例如登录页面,而在 web api 环境中,我们没有您知道的逻辑页面,我们如何在授权代码流中避免这种情况,或者我错过了对授权代码流的理解。我说的是这张图中的第 3 步auth0.com/docs/flows/authorization-code-flow。
  • 您在客户端实现 PKCE,然后将不记名令牌传递给您的 API。您的重定向将指向您的客户端应用程序,然后您在 API 端验证令牌。一个缺点是,如果有人从您的会话存储中获取了不记名令牌,那么这取决于您如何围绕它进行架构。
  • 附言。我不是安全专家,欢迎社区对此提供进一步的见解。
猜你喜欢
  • 2021-05-17
  • 2019-11-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2021-04-12
  • 1970-01-01
  • 2021-05-08
相关资源
最近更新 更多