OpenIddict中应用程序表的用途是什么



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

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

谢谢。

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


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

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


相反,有一种情况下发送client_id不是强制性的:如您提到的博客文章所示,在使用资源所有者密码凭据授予时。

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

客户端可以使用";client_id";request参数,用于在向令牌端点发送请求时标识自身。

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


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


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

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

相关内容

  • 没有找到相关文章

最新更新