我在C#中有一个Windows应用程序,我想连接到Google日历。在教程和文档示例here中,它们需要一些客户端密钥,在请求服务帐户的客户端ID时生成该秘密。但事实并非如此。但是,我可以看到公钥指纹,并且我安装了在我请求客户端ID时生成的证书。
我的猜测是他们的文档已经过时了。任何人都可以给我一个教程/参考或解释这应该如何工作吗?
由于
答案 0 :(得分:1)
上次我使用Google Calendar API时,您不需要使用客户端密钥进行Oauth服务帐户授权。如果我是对的,您只需要应用程序ID,私钥和服务帐户电子邮件地址。我在java中使用它,但如果它可以帮助你,这里是.NET的一个例子。
https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#service_account
答案 1 :(得分:0)
根据RFC 6749(OAuth 2.0),在以下情况下,OAuth 2.0授权服务器的令牌端点需要 client authentication 。
client_id
+ client_secret
)。换句话说,当客户端应用程序的客户端类型是公共的并且客户端应用程序尚未发出客户端凭据时,不需要客户端身份验证(因此不需要client_secret
) 强>
根据定义,公共客户端无法保密其客户端凭据。因此,通常,OAuth 2.0授权服务器的实现不会为公共客户端应用程序发出客户端密钥。听起来Google的实施也是如此。
谷歌没有向您的应用程序发出客户机密的原因可能是您选择的客户端配置使您的客户端应用程序成为公共客户端。
公钥指纹是另一回事。 RFC 6749(OAuth 2.0)没有提及有关公钥的任何内容。相反,我猜它可能与OpenID Connect Core 1.0,OpenID Connect Dynamic Client Registration 1.0(尤其是token_endpoint_auth_method
)或Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants有关。您必须阅读Google的文档才能知道公钥指纹的用途。