是否可以有两种类型的身份验证流程?

Is it possible to have two type of auth flow?

背景信息:REST API 将由 Web 应用程序和服务器使用 我们正在考虑让 Web 应用程序的代码流和服务器部分(机器对机器身份验证)的客户端凭证流。作为工具,我们将使用 keycloak

但现在的问题是我们不确定是否可以在一个 REST 上有两个 oauth 流 API。

一个 REST API 是否可以有两个 oauth 流程? 如果可能的话,你怎么做到的?

这很好。在这两种情况下,客户端都将使用 Keycloak 执行 OAuth 流程,这些流程可能完全不同。您的 API 需要对客户端如何进行身份验证一无所知,并且在这两种情况下都会收到 JWT 访问令牌。

两个不同的客户端不会总是调用相同的 API 端点。他们很可能使用不同的 scopes and claims,而您的 API 授权设计需要处理这个问题。服务器客户端不会通过主题声明提供用户身份,而 Web 应用程序会。

应对这些差异的方法通常是在 JWT 处理过程中设计一个 ClaimsPrincipal,然后根据在 API 的业务逻辑中接收到的数据应用授权规则。

在某些情况下,为服务器客户端设计的操作不应从 Web 应用程序调用,反之亦然。范围和声明将使您能够实现这一目标。

例子API

也许看看this code sample of mine and the blog post。关键点是 API 执行这些步骤。如果你做同样的步骤,你会保持良好的状态:

我的 API 做了一些稍微高级的事情,比如查找额外的声明,你可以忽略这些。请注意,API 不知道也不关心客户端使用了哪个流 - 可能有 5 个不同的流。 API 的工作只是处理范围和声明。