【问题标题】:Why do you need authorization grant when you can just give the token out directly?当您可以直接发出令牌时,为什么需要授权?
【发布时间】:2018-03-21 12:05:12
【问题描述】:

观看此video,它在 OAuth2 中详细说明了客户端应用程序首先必须从授权服务器获取授权授权,然后使用该授权获取令牌,然后才能访问资源服务器。赠款的目的是什么?为什么不在用户使用他/她的用户名和密码登录后立即给客户端令牌?

【问题讨论】:

    标签: oauth-2.0


    【解决方案1】:

    因为它对某些应用程序类型更安全。

    您所描述的就是所谓的授权代码流。它通常用于“经典”Web 应用程序,其中只有后端需要访问资源服务器。访问令牌的授权代码交换发生在后端,并且访问令牌永远不会离开它。交换只能进行一次,此外还需要客户端 ID 和密码(存​​储在后端)。

    单页应用程序通常使用隐式流,其中访问令牌直接在 URL 中传递到前端。

    在此处查看更多信息: IdentityServer Flows

    编辑: 问:“鉴于您必须获得授权才能获得令牌,我仍然不明白它如何更安全。为什么需要 2 件东西而不是 1 件东西访问资源?如果有人窃取了令牌,他们仍然可以访问资源 – stackjlei"

    “窃取”访问令牌将独立于您的应用程序获取它的方式。但是,在后端窃取访问令牌比在前端要困难得多。

    授权代码也通过前端传递到后端,但有人拦截和使用它的风险很小:

    1. 只能更换一次。
    2. 您需要 client-id 和 client-secret 才能交换它。客户端密钥仅在后端可用。
    3. 通常情况下,授权码会立即由您的后端交换为访问令牌。所以它的寿命只有几秒钟。事后是否有人获得使用过的授权码并不重要。

    【讨论】:

    • 鉴于您必须获得授权才能获得令牌,我仍然看不出它如何更安全。为什么需要 2 件东西而不是 1 件东西来访问资源?如果有人窃取了令牌,他们仍然可以访问该资源
    【解决方案2】:

    您有不同类型的 OAuth。 On type 不需要使用“grant”授权。这取决于谁是用户/应用程序、资源所有者和服务器 API。

    这样,您(作为用户)就不会将密码发送给应用程序。应用程序只会使用授权令牌来访问您的资源。

    如果您想了解更多详细信息,我认为这个 tuto 是个好东西

    https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2

    【讨论】:

      【解决方案3】:

      在您的场景中,可能有两台服务器,一台授权服务器和一台资源服务器。 它也可能只有一个,但让我们想象一下这种情况。

      授权服务器的目的是向已知客户端颁发短期访问令牌。客户端通过他们的 CLientID 和 CLientSecret 来识别自己。

      授权服务器 (AS) 保存客户端列表及其机密,并首先检查以确保传递的值与其列表匹配。如果他们这样做了,它会发出一个短暂的令牌。

      然后客户端可以在令牌有效的情况下与资源服务器 ( RS ) 对话。一旦令牌过期,可以请求一个新的,或者如果授权服务器允许,可以刷新过期的令牌。

      这里的重点是安全性,通常,访问令牌在请求的授权标头中传递,并且该请求需要通过 https 以确保数据不会被窃取。如果有人以某种方式获得了访问令牌,他们只能使用它直到它过期,因此为什么令牌的短寿命实际上非常重要。这就是为什么你不会发行一个永不过期的令牌。

      【讨论】:

      • 为什么要使用临时令牌?为什么不只使用临时授权而不使用令牌?我看不出这两个步骤如何使它更安全
      猜你喜欢
      • 2021-11-03
      • 2013-02-19
      • 1970-01-01
      • 2019-06-06
      • 2011-02-22
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多