首页 文章

OpenIddict中Applications表的用途是什么

提问于
浏览
2

请解释一下OpenIddict中Applications表的用法 . 我正在关注这个很棒的教程http://capesean.co.za/blog/asp-net-5-jwt-tokens/它完美无缺 . 我误解了为OpenIddict添加的Applications表的功能 .

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

谢谢 .

1 回答

  • 5

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


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

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


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

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

    客户端可以在向令牌 endpoints 发送请求时使用“client_id”请求参数来标识自身 .

    如果无法从令牌请求中提取 client_id ,则OpenIddict无法确定应用程序的标识 . 在这种情况下,将跳过与 client_id 相关的检查,并在不使用 Applications 表的情况下处理请求 . 这就是为什么您的应用程序无需填充 Applications 表即可运行的原因 .


    尽管对于日志记录有用,但发送 client_id 并不会使 grant_type=password 请求更安全,因为每个人都可以通过重复使用相同的_2680934来模拟应用程序,除非该应用程序被声明为机密并被分配了客户端凭据(读取"server-side apps only") . 在这种情况下,恶意调用者无法在不知道 client_secret 的情况下发送有效的令牌请求 .


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

    作为required by the specification,调用者必须进行身份验证才能使用内省 endpoints :如果OpenIddict在 Applications 表中找不到相应的条目,则该请求将被拒绝,并且内省中间件将永远不会工作 .

相关问题