2

请解释一下 OpenIddict 中 Applications 表的用途。我正在关注这个很棒的教程http://capesean.co.za/blog/asp-net-5-jwt-tokens/ 它运行良好。我对为 OpenIddict 添加的 Applications 表的功能有误解。

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

谢谢。

4

1 回答 1

7

Applications表包含允许使用您的身份服务器的OAuth2 客户端应用程序。


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

相同的规则适用于客户端凭据授予,这也需要有效的client_id.


相比之下,在一种情况下,发送 aclient_id不是强制性的:使用资源所有者密码凭证 grant时,如您提到的博客文章中所示。

规范明确指出发出令牌请求的客户端应用程序可以发送它的,client_id这意味着该参数不是强制性的。

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

当无法client_id从token请求中提取出no时,OpenIddict就无法确定应用程序的身份。在这种情况下,将client_id跳过 - 相关检查,并且在不使用Applications表的情况下处理请求。这就是您的应用程序无需填充Applications表格即可工作的原因。


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


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

按照规范的要求,调用者必须通过身份验证才能使用自省端点:如果 OpenIddict 在表中找不到相应的条目Applications,则请求将被拒绝,自省中间件将永远无法工作。

于 2016-05-23T00:15:58.100 回答