【问题标题】:How and why ot protect client secret in oauth2如何以及为什么在 oauth2 中保护客户端机密
【发布时间】:2017-09-26 16:20:28
【问题描述】:

请记住,我是一个菜鸟,对 oauth2 还比较陌生。我想感受一下 oauth2 并玩弄它。为此,我使用了offlineimap 连接到我的gmail 帐户并检索电子邮件。

让我复制一些配置文件,我将用它来陈述我的一般问题

oauth2_client_id = clientId
oauth2_client_secret = clientSecretToken
oauth2_request_url = requestUrl
oauth2_refresh_token = refreshToken
type = IMAP
remotehost = imap.gmail.com
remoteuser = xyz@gmail.com
remotepass = mailpasswd('gmail')

据我了解,client_id 用于将我识别为我 :) 请求 url 只是我在谷歌网站上用于外部应用程序的连接点。刷新令牌用于生成实际的访问令牌。

据我了解,客户端密码是应用程序和 gmail 之间的共享密码,以使 gmail 确信正确的应用程序正在请求某些访问权限。

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

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

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

【问题讨论】:

    标签: oauth-2.0 google-oauth


    【解决方案1】:

    想象一下,例如,您使用一个公共代码仓库作为 github,并将您的代码与您正在使用的配置文件一起推送到那里。你刚刚将你的秘密暴露给全世界,我无法告诉你人们做过多少次这样的事情。

    如果您的代码不公开,那会更好,但请确保您的网络服务器在直接请求时不会提供配置文件。只要整个内容上线后没有人可以访问它,您就是安全的。

    哦,只是为了澄清刷新令牌的工作原理....它用于延长先前已过期或即将过期的令牌的寿命,因此您不必请求新令牌。

    如果是我,我会加密所有 3 个,即 ClientID、ClientSecret 和 RefreshToken。

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

    【讨论】:

    • 感谢回答者。两个简单的问题:那么你会加密 client_secret 和 refresh_token 还是只加密 client_secret?当然,我的意思是刷新令牌用于创建新的访问令牌,如果我理解正确的话。
    • 在回答中添加了更多内容以处理您的问题
    【解决方案2】:

    但问题是您仅向您的 Gmail 帐户提供登录凭据,而不是将其暴露给第 3 方服务。与您的帐户交互的第 3 方应用程序通过登录后收到的身份验证令牌进行身份验证。如果需要,此令牌可以很容易地失效,并且第 3 方应用程序将不再具有访问权限。全部无需更改密码。

    【讨论】:

    • 感谢您的回答。这是一个公平的观点。那么“如何对待刷新和客户秘密”的问题呢?将它们存储在文件中是否危险,还是应该从加密文件中读取它们?
    猜你喜欢
    • 2020-02-06
    • 2016-11-12
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2014-07-27
    • 2017-06-15
    相关资源
    最近更新 更多