「应用安全」OAuth和OpenID Connect的全面比较(38)

{

LogError(\"redirect_uri is missing or too long\" request);

return Invalid(request);

因此 , 实现不必关心省略redirect_uri参数的情况 。 但是 , 因为redirect_uri参数在RFC 6749中是可选的 , 所以行为 - 没有redirect_uri参数的授权请求被无条件拒绝 , 尽管传统的授权请求被接受 - 违反了规范 。 此外 , IdentityServer3不会对application_type属性进行验证 。 要实现验证 , 作为第一步 , 必须将application_type属性的属性添加到表示客户端应用程序(Client.cs)的模型类中 , 因为当前实现错过了它 。

9.违反规范

细微违反规范的行为有时被称为“方言” 。 “方言”一词可能给人一种“可接受”的印象 , 但违法行为是违法行为 。 如果没有方言 , 则为每种计算机语言提供一个通用OAuth 2.0 / OpenID Connect库就足够了 。 但是 , 在现实世界中 , 违反规范的授权服务器需要自定义客户端库 。

Facebook的OAuth流程需要其自定义客户端库的原因是Facebook的OAuth实现中存在许多违反规范的行为 。 例如 , (1)逗号用作范围列表的分隔符(它应该是空格) , (2)来自令牌端点的响应的格式是application / x-www-form-urlencoded(它应该是JSON) , 以及(3)访问令牌的到期日期参数的名称是过期的(应该是expires_in) 。

推荐阅读