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

Bra*_*rks 5 oauth-2.0

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

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

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

我尝试使用一种grant"拒绝",但这不起作用.我知道要发送什么来获得批准,但似乎无法看到我应该发送什么来让OAuth服务器响应redirect_uri用户取消时的错误.

我已经查看了规范和这篇优秀的OAuth2 Simplified文章,但未能看到它.


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

{redirect-url}?error=access_denied&error_description=The+user+clicked+deny
Run Code Online (Sandbox Code Playgroud)

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

Flo*_*lli 8

请参阅https://tools.ietf.org/html/rfc6749#section-4.1.2.1

如果资源所有者拒绝访问请求,或者请求因缺少或无效的重定向URI以外的原因而失败,则授权服务器通过使用"application/x-"将以下参数添加到重定向URI的查询组件来通知客户端. www-form-urlencoded"格式

例:

HTTP/1.1 302 Found
Location: https://client.example.com/cb?error=access_denied&state=xyz
Run Code Online (Sandbox Code Playgroud)

要在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);
?>
Run Code Online (Sandbox Code Playgroud)


Bra*_*rks 2

据我所知,我认为这不是标准的一部分。我认为每个 OAuth2 服务实现者都可以决定他们想要如何做到这一点。

\n\n

例如,oauth2orize是一个很好用的 OAuth2 库,被超级流行的Passport使用,它是这样的:

\n\n

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

\n\n

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

\n\n

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

\n