在OAuth中,你使用客户端ID/密钥发起请求以获取授权码。然后,你再发起第二个请求来交换授权码以获取访问令牌。我的问题是:
为什么需要这两步流程而不是一开始就获取访问令牌呢?这如何增加整个过程的安全性?还是有其他原因?
我在谈论服务器端应用程序(例如php)从远程服务器请求授权,而不是JavaScript。
为什么需要这两步流程而不是一开始就获取访问令牌呢?这如何增加整个过程的安全性?还是有其他原因?
我在谈论服务器端应用程序(例如php)从远程服务器请求授权,而不是JavaScript。
response_type
设置为token
或id_token token
。更安全...还是不安全?这取决于它的应用方式。
请查看: https://auth0.com/docs/api-auth/which-oauth-flow-to-use
您会注意到,当在服务器端使用时,授权代码流程被使用。同时,请注意,当请求授权代码时,响应URL带有一个带问号的查询字符串:https://example-app.com/redirect?code=g0ZGZmNjVmOWI&state=dkZmYxMzE2
当使用单页应用程序时,您将使用隐式流程。请注意,访问令牌通过URL中的锚点(#)发送:https://example-app.com/redirect#access_token=MyMzFjNTk2NTk4ZTYyZGI3
锚点值永远不会被发送到服务器,它只能在spa中对客户端可用。服务器将永远无法看到访问令牌。
当服务器应用程序收到重定向时,必须能够读取它。这是可能的,因为url中有一个问号而不是#。如果直接发送令牌,客户端可以通过浏览器历史记录或fiddler查看访问令牌。