【问题标题】:When to use the private key during Google OAuth workflow?在 Google OAuth 工作流程中何时使用私钥?
【发布时间】:2019-05-23 03:34:43
【问题描述】:

我正在构建一个基于 OAuth 的工作流程来保护一些资源,并且我想知道 Google 提供的秘密客户端密钥是否真的对登录 JSON Web 令牌 (JWT) 之外的其他事情有用。

目前,我正在使用access_token 从我的前端应用程序收集用户响应,这似乎足以验证用户身份。我得到了我需要的所有详细信息以及令牌的服务器端验证。

我目前缺少什么吗?

【问题讨论】:

    标签: security oauth-2.0 google-oauth


    【解决方案1】:

    Google 客户端密码用于为 Google OAuth 2.0 识别您的应用/网站。客户端密码不代表 Google 服务之外的任何内容。

    在您的问题评论中,您询问将访问令牌发送到服务器是否安全。如果您已正确实施 Google OAuth 2.0,则您的服务器将作为身份验证流程的一部分发送访问令牌。无需将令牌从客户端发送到服务器,因为服务器已经拥有它(您应该在身份验证后将访问令牌、刷新令牌和客户端 ID 令牌保存为客户端会话状态的一部分)。在授权期间,用户授予您的应用/网站使用您请求的范围的权限。

    您没有指定您正在使用什么类型的访问令牌或它是如何创建的。相反,如果您的访问令牌是从您自己的内部机制的 Signed-JWT 派生的,那么我对 Google OAuth 2.0 的评论不适用,创建、控制和管理令牌取决于您的服务器逻辑。

    【讨论】:

    • 非常感谢这个非常详细的答案,access_token 来自嵌入式 Google 身份验证 iframe,我将生成的这个 access_token 发送到服务器以在我的系统中生成一个唯一身份(所以检查服务器端 access_token 的有效性)以及通过服务器签名的 JWT 提供给最终用户的自定义权限和规则。换句话说,我正在扩展现有的身份验证工作流程,以获得一个集中的授权平台,并将其作为服务提供给最终用户。
    【解决方案2】:

    是的,您需要 client_secret 来交换 access_token,我假设您当前的应用使用 授权码 授权类型来交换 access_token 不需要 client_secret,只需要 redirect_uriclient_id 因为你不能存储 client_secret在纯前端应用程序中安全。

    oauth2 中还有其他授权类型,例如 Client Credential(主要由服务器应用使用),您需要提供 client_idclient_secret 交换 access_token。

    您可以阅读更多关于 oauth-2 授权类型here

    【讨论】:

    • 将 access_token 发送到服务器而不是使用 client_secret 的方法是否有任何风险?感谢您的回复
    • 只要您与服务器的通信是安全的,您应该可以将 access_Token 发送到服务器。
    • 不,因为在授权码中,授权类型access_token只属于授权用户,这意味着你不能使用那个access_token 获取其他用户的资源。您不能使用 client_secret 访问资源,client_secret 用于交换 access_token
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 2016-01-05
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多