当用户需要批准使用OAuth2进行身份验证的请求时,通常会给出“批准”和“取消”按钮。
当用户点击“取消”时,我应该发送什么?
作为开发人员,当用户点击“取消”时,我会向OAuth服务器发送什么内容以拒绝该请求?
我尝试使用grant
类型的“拒绝”,但这不起作用。我知道要发送什么来获得批准,但似乎无法看到我应该发送什么来让OAuth服务器响应redirect_uri
,并在用户取消时出现错误。
我已经查看了规范和这个不错的OAuth2 Simplified article,但却未能看到它。
注意:我没有在任何地方看到这个明确详述。是否假设我的应用程序应该自行管理?例如,在这种情况下,我的应用只是发布到自己的redirect_uri
而不是发布到OAuth2服务器?
{redirect-url}?error=access_denied&error_description=The+user+clicked+deny
如果是这样,这似乎有点奇怪,因为所有实现客户端都必须使用错误代码和原因来构建url。
答案 0 :(得分:8)
请参阅https://tools.ietf.org/html/rfc6749#section-4.1.2.1
如果资源所有者拒绝访问请求或者请求因缺少或无效的重定向URI以外的原因而失败,则授权服务器通过使用&#将以下参数添加到重定向URI的查询组件来通知客户端: 34;应用程序/ x-WWW窗体-urlencoded"格式
示例:
HTTP/1.1 302 Found
Location: https://client.example.com/cb?error=access_denied&state=xyz
在PHP中重定向:
<?php
http_redirect("https://client.example.com/cb", array("error" => "access_denied", "state" => "xyz", "error_description" => "The user clicked deny"), true, HTTP_REDIRECT_FOUND);
?>
答案 1 :(得分:2)
我不认为这是我能看到的标准的一部分。我认为每个OAuth2服务实现者都需要确定他们想要的方式。
例如,oauth2orize是超级流行的Passport节点模块使用得很好的OAuth2库,它是这样的:
注意:这些链接可能指向旧版本的代码。它们是规范化的链接,以确保它们指向代码中的正确位置: