【问题标题】:Oauth2 Flow , difference between Authorise and Authorisation GrantOauth2 Flow , Authorize 和 Authorization Grant 的区别
【发布时间】:2018-12-01 12:12:20
【问题描述】:

我正在使用这个库:https://github.com/manjeshpv/node-oauth2-server-implementation

根据我对 Oauth2 的理解:

1)Generate a clientid and clientSecret

2)User use clientId and clientSecret to get a bearerToken

3)Authorisation server returns accessToken to users if valid clientId and clientSecret combination

4)User then use the accessToken to run http post/get api calls (within their scope)

在 GITHUB 中给出的 POSTMAN 示例中,我们有

我注意到 Password Grant、Refresh Token 、Client Credential Grant 和 Authorization Grant 指向同一个 POST 请求,但正文不同。

和 Authorize 示例 Web 服务,我假设用户必须单击才能让授权服务器返回访问代码,以便用户调用范围特定的 API url,但不知何故也需要访问代码,我我很困惑。

如果我使用客户端凭据授予(我假设是使用我的 clientId 和 clientSecret 返回一个 AccessToken),那么授权 Web 服务的意义何在?

这个库和网络服务示例的正确流程是什么?

非常感谢您的帮助,谢谢!

【问题讨论】:

    标签: node.js express oauth oauth-2.0


    【解决方案1】:

    和 Authorize 示例 Web 服务,我假设是该用户 必须单击才能使授权服务器返回 用户访问代码以调用范围特定的 API url,但不知何故 也需要访问代码,我很困惑。

    您的术语有点混乱。下面是一个可能最流行的 OAuth 流程:

    1. 开发者(你)注册OAuth客户端,收到clientidclientSecret
    2. 用户打开一些 URL,如 oauth.com/authorize,显示一个对话框,要求为开发人员的应用程序授予一些权限。 (这里使用了clientId,但不需要clientSecret)
    3. 如果用户同意,授权代码将发送到开发者的应用程序(发送到在步骤 1 中定义的redirect_uri)。此代码是短期代码,不能用于访问用户数据。
    4. 开发者的应用程序使用授权码clientIdclientSecret 向OAuth 服务器发出POST 请求,并获得授权token 作为交换。此令牌可用于访问用户数据。

    如果我使用客户端凭据授予(我假设是返回一个 AccessToken 使用我的 clientId 和 clientSecret),那么授权 web 服务的意义何在?

    ClientCredentials 授权获得的令牌标识客户端,但不标识用户。所以我想在你的情况下它是没用的。

    【讨论】:

    • 嗨@eugene,感谢您的回答。在您的第 2 点和第 3 点中,通过 redirect_uri 发送到开发人员应用程序,但为什么还需要承载 {{accesstoken}}?
    • @Gene 授权码是在没有客户端密码的情况下获得的——这就是为什么我们首先需要用代码交换令牌(这个操作需要 client_secret)。如果您不需要客户端秘密验证 - 您可以使用 implicit flow (这与我描述的非常相似,但第 3 步返回访问令牌,并且根本不使用授权码)
    • 我想通了。你说的有道理。 Client Credentials 根据 client_id+client secret 组合识别。谢谢!
    猜你喜欢
    • 2022-12-30
    • 2021-04-28
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2014-01-09
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多