请解释一下OpenIddict中Applications表的用途。
我正在关注这个很棒的教程http://capesean.co.za/blog/asp-net-5-jwt-tokens/
它完美地工作。我对为OpenIddict添加的Applications表的功能有误解。
目前,我的前端(Angularjs)+后端(带有ASP.NET Core和OpenIddict的Web.API)在一台服务器上可以正常工作。前端接收令牌并将其用于请求中。后端生成令牌并对其进行评估。一切都很好,但是Applications表没有任何记录。
谢谢。
最佳答案
Applications
表包含允许使用身份服务器的OAuth2 client applications。
当使用authorization code或implicit之类的交互式流时,必须添加新条目,因为客户端应用程序必须发送有效的client_id
:如果client_id
丢失或与之不对应,则OpenIddict将拒绝授权请求。您完全信任的应用程序(即存储在Applications
表中的应用程序)。
相同的规则适用于client credentials grant,也需要有效的client_id
。
相比之下,在一种情况下,发送client_id
并不是强制性的:使用resource owner password credentials grant时,如您提到的博客文章所示。
specification明确声明发出令牌请求的客户端应用程序可以发送其client_id
,这意味着此参数不是必需的。
当向令牌端点发送请求时,客户端可以使用“ client_id”请求参数来标识自己。
如果无法从令牌请求中提取client_id
,则OpenIddict无法确定应用程序的身份。在这种情况下,将跳过与client_id
相关的检查,并且不使用Applications
表来处理请求。这就是为什么您的应用程序无需填充Applications
表即可运行的原因。
尽管发送client_id
对于日志记录很有用,但发送grant_type=password
并不会使client_id
请求更加安全,因为每个人都可以通过重用同一client_secret
来模拟应用程序,除非该应用程序被声明为机密并被分配了客户端凭据(请阅读“仅限服务器端应用程序”)。在这种情况下,恶意调用者无法在不知道Applications
的情况下发送有效的令牌请求。
在OpenIddict中,还有一种情况是添加显式的应用程序注册很有用:使用introspection middleware验证访问令牌(而不是JWT承载中间件)时。
作为required by the specification,调用者必须进行身份验证才能使用自省端点:如果OpenIddict在表中找不到对应的条目,则该请求将被拒绝,并且自省中间件将永远无法工作。
关于asp.net-core - OpenIddict中Applications表的用途是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37380434/