OpenIddict 中 Applications table 的用途是什么

What is use of Applications table in OpenIddict

请解释一下 Applications table 在 OpenIddict 中的用途。 我正在学习这个很棒的教程 http://capesean.co.za/blog/asp-net-5-jwt-tokens/ 它工作得很好。我对为 OpenIddict 添加的应用程序 table 的功能有误解。

目前,我的前端 (Angularjs) + 后端(Web.API with ASP.NET Core and OpenIddict)在一台服务器上运行良好。前端接收令牌并在请求中使用它。后端生成令牌并对其进行评估。一切正常,但 Applications table 没有任何记录。

谢谢。

Applications table 包含允许使用您的身份服务器的 OAuth2 client applications


使用 authorization code or implicit 等交互式流程时,必须添加新条目,因为客户端应用程序必须发送有效的 client_id:如果 client_id 是,OpenIddict 将拒绝授权请求缺少或不对应您完全信任的应用程序(即存储在 Applications table 中的应用程序)。

同样的规则适用于 client credentials grant,也需要有效的 client_id


相比之下,在一种情况下发送 client_id 不是强制性的:当使用 resource owner password credentials grant 时,如您提到的博客 post 中所示。

specification 明确指出发出令牌请求的客户端应用程序可以发送其 client_id,这意味着该参数不是必需的。

A client MAY use the "client_id" request parameter to identify itself when sending requests to the token endpoint.

当无法从令牌请求中提取 client_id 时,OpenIddict 无法确定应用程序的身份。在这种情况下,将跳过与 client_id 相关的检查,并在不使用 Applications table 的情况下处理请求。这就是为什么您的应用程序无需填充 Applications table.

即可运行的原因

虽然对日志记录有用,但发送 client_id 不会使 grant_type=password 请求更安全,因为每个人都可以通过重复使用相同的 client_id 来冒充应用程序,除非应用程序被声明为机密并被分配了客户端凭据(阅读“仅限服务器端应用程序”)。在这种情况下,恶意调用者无法在不知道 client_secret.

的情况下发送有效的令牌请求

在 OpenIddict 中,还有一种情况下添加显式应用程序注册很有用:当使用 introspection middleware 验证访问令牌(而不是 JWT 承载中间件)时。

required by the specification 一样,调用者必须进行身份验证才能使用内省端点:如果 OpenIddict 在 Applications table 中找不到相应的条目,请求将被拒绝并且自省中间件将永远无法工作。