gpt4 book ai didi

oauth-2.0 - 2-legged oauth 在 OAuth 2.0 中如何工作?

转载 作者:行者123 更新时间:2023-12-03 06:00:15 26 4
gpt4 key购买 nike

在 OAuth 1.0 中,两条腿相当容易:只需照常发送请求并省略 access_token header 即可。

OAuth 2.0 中的情况似乎发生了变化(正如我今天发现的那样,变化很大:))。在 OAuth 2.0 中,请求不再包含随机数、消费者 key 、时间戳等 header 。这只是替换为:

Authorization: OAuth ya29.4fgasdfafasdfdsaf3waffghfhfgh

我了解 OAuth 2.0 中的三足授权如何工作以及应用程序流程。但是 2-leged 在 2.0 中是如何工作的呢?是否可以设计一个同时支持 2 足和 3 足 OAuth 2.0 的 API?

我一直在寻找与此相关的信息,但我在 1.0 的 2-legged 上找到了很多东西,而在 2.0 上几乎没有找到任何东西。

最佳答案

经过大量研究,我发现 client_credentials 授权类型适用于这种情况。一旦您将这个术语输入谷歌,您就可以找到大量非常有用的资源。

这是 3 足 OAuth 2.0 的正常流程(我们希望用户登录):

假设我们的应用程序中有以下端点用于身份验证:

/oauth/auth

/oauth/token

通常(对于授权代码授予),我们会将用户引导至 /oauth/auth?state=blah&client_id=myid&redirecturl=mysite.com/blah

然后,经过身份验证后,用户将被重定向到 mysite.com/blah?code=somecode

然后我们获取 somecode 并使用 /oauth/token?code=somecode&client_id=myid&client_secret=mysecret 将其交换为 token

然后我们可以使用 token 进行调用。

<小时/>

这是 client_credentials 实现 2-legged OAuth 2.0 的应用程序流程,明显更简单:

  • 在这种方法中,我们不需要执行任何身份验证。

  • 我们只需使用以下表单数据 POST 到 /oauth/token:

     grant_type=client_credentials&scope=view_friends

请注意,范围是可选的。然后端点直接返回一个访问 token 供我们使用(不提供刷新 token )。由于未提供刷新 token ,因此当 token 过期时,您需要重新进行身份验证并请求新的 token 。

这会导致以下警告:

  • 仅将其用于(非常非常)可信的应用程序,例如内部应用程序。
  • 您需要设计自己的身份验证方式。例如,RFC's example使用基本身份验证。

另一个解决方案是使用 JWT(JSON Web token ),例如 google OAuth API 。这是一个非常复杂的过程,但有许多库可用于生成 JWT。然后您发布以下表单数据(当然是 url 编码的):

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=generated_jwt

此信息将发布到 /oauth/token 以获取您的 token 。

<小时/>

至于是否可以创建一个支持2足和3足OAuth 2.0的API的问题,是的,可以

然后,仅当用户需要针对服务进行身份验证时才使用 /auth 端点。

/token 端点中,只需检查 urn:ietf:params:oauth:grant-type:jwt 的 GET 参数中 grant_type 的值-bearer 如果使用 JWT 或 client_credentials 作为 client_credentials。

请注意,在生成要提供给用户的 client_id 和 client_secret 时,如果您支持多个 grant_types,请确保您有一个数据库列来存储 id 和 Secret 的授权类型生成为.如果需要每个用户有多个授权类型,请为每个授权类型生成一组不同的凭据。

关于oauth-2.0 - 2-legged oauth 在 OAuth 2.0 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com