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 中找不到相应的条目,请求将被拒绝并且自省中间件将永远无法工作。
请解释一下 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 中找不到相应的条目,请求将被拒绝并且自省中间件将永远无法工作。