(警告:可能在前面的常见问题解答中,但我可能缺少明显的东西,因此我需要有人通过将其拼写出来来使我困惑。)
我有一个服务器,它对应于我的oauth提供程序中的 Application (在我的情况下为auth0)。此应用程序具有客户端ID /机密。
我有一个Web服务器,该服务器可以管理重定向到auth0登录页面的网页,并验证用户是否是他们声称的用户。
Alice可以打开一个网页,登录auth0,然后使用我的应用程序。
现在,该服务器还具有一组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调用。
但是现在,我希望Alice能够运行执行API调用的桌面应用程序。
我希望API服务器能够知道它是Alice,所以我真的需要一个带有用户声明的JWT。
似乎Authorization Code Grant流程应涵盖这种情况。
我了解这一点,该流程假设:
xxxx.auth0/authorize
作为参数导航到client_id
localhost
,以接收code
xxx.auth0/oauth/token
进行POST。
有很多库似乎可以帮助您做到这一点。
我只是看不到我的桌面应用程序如何能够将 client_secret 发送到auth0,并且仍然保留它为“秘密”。
还有其他Oauth2 flows,但我的理解是我不能使用其他{3>}: