【问题标题】:After getting token using Authorization Code Flow (OAuth 2.0), how can API knows that token sent from front end is valid?使用授权码流(OAuth 2.0)获取令牌后,API如何知道前端发送的令牌是有效的?
【发布时间】:2020-12-18 03:53:28
【问题描述】:

假设我创建了自己的应用程序。我们将前端和 RESTful API 作为后端做出反应,并且我们正在使用 Google OAuth 对我们的用户进行授权。前端正在调用 API。前端使用 OAuth 的授权码流。从 Google OAuth 服务器获取访问令牌后,前端使用此令牌调用我的后端。

现在恶意用户将从 Chrome 网络选项卡获取我的 API 的 URL、REST API 所需的其他信息,并且可以使用访问令牌直接调用 API。

问题:

How will my REST API know from where the request is coming?

Also how it will validate the access token?

Is it possible once User got all information about my REST API, it can call directly with fake access token?

我查看了授权代码流的图表。下面是链接。 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-app-types

But how will web api validate the token?

如果我缺少一些信息,请指导我。

【问题讨论】:

    标签: oauth-2.0 authorization


    【解决方案1】:

    Google 的 OAuth 服务器将向您的前端发出 JSON Web Token (JWT)。此令牌由 Google 私钥签名。您的 API 需要:

    1. 获取 Google 的公钥并
    2. 验证 JWT 的签名。

    如果有效,则令牌来自 Google。如果不是,则它不是来自 Google 或被篡改。

    在此之后,您的 API 需要进行一些额外的检查:

    • 检查过期时间,看看它不是过去的。这可以在 exp 声明中找到。
    • 检查令牌不仅来自 Google,而且来自您的 API。这可以通过查看aud(观众)声明并确定它适合您来完成。
    • 检查令牌的发布时间,并确保它不是在将来。发布时间在iat 声明中。
    • 检查您是否应该已经开始使用它,并且在使用期限上没有某种禁运。这将在 not-before 声明中说明 (nbf)。
    • 检查令牌类型是否为访问令牌(与 ID 令牌相反)。

    (您可以找到更长的more detailed description in this howto。)

    如果您执行这些操作,则可以确定 Google 颁发了令牌并且它是为您的 API 准备的。 它不会向你的 API 表明调用者是你的前端。 原因是令牌是一个“承载令牌”,这意味着令牌只绑定到承载或呈现它的那个.为确保只有您的应用程序提供令牌,您需要它来证明拥有私钥。使用 Google 作为您的令牌发行者时这是不可能的(据我所知)。

    【讨论】:

      【解决方案2】:

      我的问题基本上是我的 rest api 如何验证令牌的完整性。我找到了链接:https://developers.google.com/identity/sign-in/android/backend-auth

      【讨论】:

        猜你喜欢
        • 2020-12-11
        • 1970-01-01
        • 2018-10-01
        • 1970-01-01
        • 2020-11-22
        • 2021-09-19
        • 2021-01-19
        • 1970-01-01
        • 2017-04-09
        相关资源
        最近更新 更多