如果我正确理解了oauth(授权代码授予,暂时忽略pcke),那么结构的工作原理有点像这样(如here所解释的那样):
客户端重定向到类似的内容:
https://authorization-server.com/auth?response_type=code
&client_id=29352735982374239857
&redirect_uri=https://example-app.com/callback
&scope=create+delete
&state=xcoivjuywkdkhvusuye3kch
然后显示一个身份验证页面并进行处理(简单的用户名+密码表单)。
在用户通过身份验证后,oauth服务器向客户端浏览器发送另一个重定向。然而,这一次是以授权代码为参数的https://example-app.com/callback
。到目前为止一切顺利。然而,在阅读上面url中的解释时,我注意到:
redirect_uri不是规范所必需的,但您的服务应该需要它。此URL必须与开发人员在创建应用程序时注册的URL之一匹配,如果不匹配,授权服务器应该拒绝请求。
它告诉我URL需要注册--这对我来说意味着只能有几个“回调URL”。
这让我感到困惑,并质疑它的用法:在我们的应用程序中,一个 * 需要 * 能够在任何时候登录。如果登录后用户返回到登录页面,这真的是令人困惑/可怕的用户体验。-一个例子是一个正在订购东西的用户,可以在支付完成之前登录。
是唯一的方法来编码的实际网址在“状态”变量?这似乎很麻烦,容易出现问题.(更不用说必须作出一个编码功能等).或者有其他的方法,这可以做到这一点,我不知道?
我在naswer中注意到一些更重要的细节。我们的web应用程序作为一个“半”单页应用程序运行。然而,由于安全问题,一个额外的后端-前端服务器被添加到混合中,它处理oauth代码流。这是在previous question here中给出的建议。
1条答案
按热度按时间mo49yndu1#
回调URL是负责从第三方OAuth提供者接受OAuth令牌的URL,处理它,然后在用户登录后向他们呈现您想要呈现的任何内容。
无论你想向他们展示什么,都可以重定向到你网站上的另一个页面。
是在“state”变量中编码实际URL的唯一方法吗?
state参数被设计用来保存反CSRF令牌。您不应该在那里编码其他数据。
存储要重定向回其他位置的URL,例如在服务器端会话中。