使用授权代码流(OAuth 2.0)获取令牌后,API如何知道从前端发送的令牌有效?
After getting token using Authorization Code Flow (OAuth 2.0), how can API knows that token sent from front end is valid?
假设我创建了自己的应用程序。我们有反应前端和 RESTful API 作为后端,我们使用 Google OAuth 来授权我们的用户。前端正在调用 APIs。前端使用 OAuth 的授权代码流。从 Google OAuth 服务器获取访问令牌后,前端使用此令牌调用我的后端。
现在,恶意用户将从 Chrome 网络选项卡中获取我的 API 的 URL、REST API 所需的其他信息,并可以直接调用 APIs 与访问令牌。
问题:
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?
我查看了授权代码流图。下面是link。
https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-app-types
But how will web api validate the token?
如果我缺少一些信息,请指导我。
Google 的 OAuth 服务器将向您颁发 front-end 一个 JSON Web 令牌 (JWT)。此令牌由 Google 私钥签名。您的 API 需要:
- 获得Google的public密钥和
- 验证 JWT 的签名。
如果有效,则令牌来自 Google。如果不是,则它不是来自 Google 或被篡改。
在此之后,您的 API 需要做一些额外的检查:
- 检查过期时间,看看它不是过去的。这可以在
exp
声明中找到。
- 检查令牌是否不仅来自 Google,而且来自您的 API。这可以通过查看
aud
(观众)声明并确定它适合您来完成。
- 检查令牌的颁发时间,并确保不是在将来。发布时间在
iat
声明中
- 检查您是否应该已经开始使用它,并且在使用期限上没有某种禁运。这将在 not-before 声明中指明 (
nbf
)。
- 检查令牌类型是否为访问令牌(而不是 ID 令牌)。
(你可以找到更长的more detailed description in this howto。)
如果您执行这些操作,您可以确定 Google 颁发了令牌并且它是为您的 API 而设计的。 它不会向您的 API 表明调用者是您的 front-end。 原因是该令牌是“不记名令牌”,这意味着该令牌已绑定仅对携带或赠送它的人。为确保只有您的应用程序提供令牌,您需要它来证明拥有私钥。当使用 Google 作为您的令牌发行者时,这是不可能的(据我所知)。
我的问题基本上是我的休息 api 如何验证令牌的完整性。我找到了 link:https://developers.google.com/identity/sign-in/android/backend-auth
假设我创建了自己的应用程序。我们有反应前端和 RESTful API 作为后端,我们使用 Google OAuth 来授权我们的用户。前端正在调用 APIs。前端使用 OAuth 的授权代码流。从 Google OAuth 服务器获取访问令牌后,前端使用此令牌调用我的后端。
现在,恶意用户将从 Chrome 网络选项卡中获取我的 API 的 URL、REST API 所需的其他信息,并可以直接调用 APIs 与访问令牌。
问题:
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?
我查看了授权代码流图。下面是link。 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-app-types
But how will web api validate the token?
如果我缺少一些信息,请指导我。
Google 的 OAuth 服务器将向您颁发 front-end 一个 JSON Web 令牌 (JWT)。此令牌由 Google 私钥签名。您的 API 需要:
- 获得Google的public密钥和
- 验证 JWT 的签名。
如果有效,则令牌来自 Google。如果不是,则它不是来自 Google 或被篡改。
在此之后,您的 API 需要做一些额外的检查:
- 检查过期时间,看看它不是过去的。这可以在
exp
声明中找到。 - 检查令牌是否不仅来自 Google,而且来自您的 API。这可以通过查看
aud
(观众)声明并确定它适合您来完成。 - 检查令牌的颁发时间,并确保不是在将来。发布时间在
iat
声明中 - 检查您是否应该已经开始使用它,并且在使用期限上没有某种禁运。这将在 not-before 声明中指明 (
nbf
)。 - 检查令牌类型是否为访问令牌(而不是 ID 令牌)。
(你可以找到更长的more detailed description in this howto。)
如果您执行这些操作,您可以确定 Google 颁发了令牌并且它是为您的 API 而设计的。 它不会向您的 API 表明调用者是您的 front-end。 原因是该令牌是“不记名令牌”,这意味着该令牌已绑定仅对携带或赠送它的人。为确保只有您的应用程序提供令牌,您需要它来证明拥有私钥。当使用 Google 作为您的令牌发行者时,这是不可能的(据我所知)。
我的问题基本上是我的休息 api 如何验证令牌的完整性。我找到了 link:https://developers.google.com/identity/sign-in/android/backend-auth