使用auth0授权* NON-web *应用程序并获取API访问令牌

时间:2018-09-03 17:46:45

标签: oauth-2.0 auth0

(警告:可能在前面的常见问题解答中,但我可能缺少明显的东西,因此我需要有人通过将其拼写出来来使我困惑。)

上下文

我有一个服务器,它对应于我的oauth提供程序中的 Application (在我的情况下为auth0)。此应用程序具有客户端ID /机密。

网页用例(TL; DR:重定向工作)

我有一个Web服务器,该服务器可以管理重定向到auth0登录页面的网页,并验证用户是否是他们声称的用户。

Alice可以打开一个网页,登录auth0,然后使用我的应用程序。

API用例(TL; DR:客户端的秘密)

现在,该服务器还具有一组API,并且这些API需要带有JWT令牌的Authorization: Bearer xxxx头。

此API也对应于Auth0中的“ API”资源。

现在,我可以轻松地在auth0中创建另一个应用程序,该应用程序具有另一个客户端ID /密码集,并且可以使用“ oauth / token”来获取一个access_token。

 POST https://xxxx.auth0.com/oauth/token
        Content-Type: application/json
        {
          "client_id": "[client_id]",
          "client_secret": "[client_secret]",
          "audience": "https://yyyy/api",
          "grant_type": "client_credentials"
 }

这个秘密是一个秘密,因为我(安全地)将它提供给Bob,而Bob则将其放在他的服务器中,并留在Bobs服务器上,并且Bob的服务器可以进行API调用。

台式机应用案例(TL; DR:如果我一次只与一个人共享它,这是一个秘密吗?)

但是现在,我希望Alice能够运行执行API调用的桌面应用程序。

我希望API服务器能够知道它是Alice,所以我真的需要一个带有用户声明的JWT。

似乎Authorization Code Grant流程应涵盖这种情况。

我了解这一点,该流程假设:

  • 我的桌面应用程序打开浏览器
  • 此浏览器以xxxx.auth0/authorize作为参数导航到client_id
  • 浏览器重定向到我的桌面应用程序,该应用程序可能正在监听localhost,以接收code
  • 然后我的应用程序使用代码_和client_secret _
  • xxx.auth0/oauth/token进行POST。

有很多库似乎可以帮助您做到这一点。

我只是看不到我的桌面应用程序如何能够将 client_secret 发送到auth0,并且仍然保留它为“秘密”。

流程错了吗?

还有其他Oauth2 flows,但我的理解是我不能使用其他{}:

  • “客户端是资源所有者吗” =>否
  • “客户端是服务器上的Web应用程序” =>否
  • “客户端是否信任用户凭据” =>我认为“否”,但是我在这里错了吗?
  • “客户端是SPA吗?” =>否,就意味着它不在浏览器中运行
  • “授权代码授予(PKCE“)” =>可以工作,但是我还没有看到任何实现“ PKCE”部分的C ++库-发送质询而不是秘密。那是要走的路?

0 个答案:

没有答案