我正在尝试使用 Python oauthlib 为网站实现 Oauth2。我决定使用授权类型“ResourceOwnerPasswordCredentialsGrant”,这是因为网站和 API 是我自己的,不会对第三方开放。
在“resource_owner_password_credentials.py”中,为什么“client_authentication_required”被硬编码为返回“True”?
我需要对我的客户(网站)进行身份验证吗?据我了解,这将是“公共”而不是机密客户。
我正在尝试使用 Python oauthlib 为网站实现 Oauth2。我决定使用授权类型“ResourceOwnerPasswordCredentialsGrant”,这是因为网站和 API 是我自己的,不会对第三方开放。
在“resource_owner_password_credentials.py”中,为什么“client_authentication_required”被硬编码为返回“True”?
我需要对我的客户(网站)进行身份验证吗?据我了解,这将是“公共”而不是机密客户。
看起来 oauthlib 的作者以这种方式解释了规范。资源所有者密码凭据授予类型 ( https://www.rfc-editor.org/rfc/rfc6749#section-4.3 ) 部分说:
(B) 客户端通过包含从资源所有者收到的凭据,从授权服务器的令牌端点请求访问令牌。发出请求时,客户端向授权服务器进行身份验证。
请注意,它建议客户端进行身份验证,但它没有在最后一句中使用 MUST 关键字。就在它下面有稍微复杂的文本(https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2)说:
如果客户端类型是机密的或客户端已获得客户端
凭据(或分配了其他身份验证要求),则
客户端必须向授权服务器进行身份验证,如
第 3.2.1 节所述。
注意“如果客户是机密的”,这一次暗示公共客户也可以使用这种授权类型,这是有道理的。
所以我认为这是由于对规范中的措辞过于严格的解释。