OAuth2:如何向OAuth2服务器发送“拒绝”请求?

时间:2015-04-24 18:52:40

标签: oauth-2.0

当用户需要批准使用OAuth2进行身份验证的请求时,通常会给出“批准”和“取消”按钮。

当用户点击“取消”时,我应该发送什么?

作为开发人员,当用户点击“取消”时,我会向OAuth服务器发送什么内容以拒绝该请求?

我尝试使用grant类型的“拒绝”,但这不起作用。我知道要发送什么来获得批准,但似乎无法看到我应该发送什么来让OAuth服务器响应redirect_uri,并在用户取消时出现错误。

我已经查看了规范和这个不错的OAuth2 Simplified article,但却未能看到它。

注意:我没有在任何地方看到这个明确详述。是否假设我的应用程序应该自行管理?例如,在这种情况下,我的应用只是发布到自己的redirect_uri而不是发布到OAuth2服务器?

{redirect-url}?error=access_denied&error_description=The+user+clicked+deny

如果是这样,这似乎有点奇怪,因为所有实现客户端都必须使用错误代码和原因来构建url。

2 个答案:

答案 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库,它是这样的:

注意:这些链接可能指向旧版本的代码。它们是规范化的链接,以确保它们指向代码中的正确位置:

https://github.com/jaredhanson/oauth2orize/blob/c59aefd14b0fb98f97e3419b8d611c0fb4255c69/lib/middleware/decision.js#L46

https://github.com/jaredhanson/oauth2orize/blob/c59aefd14b0fb98f97e3419b8d611c0fb4255c69/test/middleware/decision.test.js#L75-L83