2017-09-26 103 views
0

请记住,我是一个noob,而且是oauth2的新手。我想得到oauth2的感觉并玩弄它。为此,我使用offlineimap连接到我的Gmail帐户并检索电子邮件。如何以及为什么保护oauth2中的客户机密

让我复制我将用它来说明我的一般性问题

oauth2_client_id = clientId 
oauth2_client_secret = clientSecretToken 
oauth2_request_url = requestUrl 
oauth2_refresh_token = refreshToken 
type = IMAP 
remotehost = imap.gmail.com 
remoteuser = [email protected] 
remotepass = mailpasswd('gmail') 

据我了解CLIENT_ID用于识别我为我的一些配置文件:请求URL只是我连接点在谷歌网站上的外部应用程序。刷新令牌用于生成实际的访问令牌。

据我所知,客户端的秘密是应用程序和gmail之间的共享秘密,以说服gmail正确的应用程序正在请求某些访问。

问题如果我正确理解了这一点,刷新令牌和客户机密应该是“秘密”的。这是否意味着将这些信息放在这样的配置文件中是危险的?我们是否应该像密码一样加密它(例如用gpg)?

oauth2中对我来说不是100清楚的最后一点是:我是否正确理解我需要提供凭据(用户名/密码),因为oauth2基本上假定我已登录?

公平地说,oauth2在高层上所做的一切就是确保某个外部应用获得对我的Gmail的某种访问权限。这是为特定应用程序授予特定数据。但我仍然需要提供我的凭据才能登录到Gmail。

回答

1

想象一下,您使用公共代码回购作为github例如,并将您的代码与您正在使用的配置文件一起推送到那里。你刚刚把你的秘密暴露给了整个世界,我不能告诉你有多少人做过这样的事情。

如果您的代码不公开,那么更好,但要确保您的Web服务器在直接请求时不会提供配置文件。只要整个事情是活的,只要没有人可以访问它,你就是安全的。

哦,只是为了阐明刷新标记的工作原理....它用于延长以前标记的寿命,该标记已过期或接近过期,因此您不必申请新标记。

如果是我,我会加密所有3,意思是ClientID,ClientSecret和RefreshToken。

想想这样,ClientID就是你的用户名,ClientSecret就是你的密码。

+0

thx为anwser。两个简单的问题:那么你会只加密client_secret和refresh_token还是只加密client_secret?当然,我的意思是刷新令牌用于创建一个新的访问令牌,如果我正确地理解它。 – math

+0

增加了更多的答案来处理您的问题 –

+0

很酷,非常感谢扩展anwser! – math

1

但事情是你只提供登录凭据到你的Gmail帐户,而不是暴露他们的第三方服务。第三方应用程序与您的帐户进行交互,通过登录后收到的身份验证令牌进行身份验证。如果需要,该令牌很容易失效,第三方应用程序将不再具有访问权限。所有这些都不需要更改密码。

+0

thx为您的答案。这是一个公平的观点。关于“如何看待更新和保密秘密”的问题呢?将它们存储在文件中是否危险,或者我应该从加密文件中读取它们? – math