Paw没有从OAuth代理

时间:2016-09-02 11:51:58

标签: oauth oauth-2.0 paw-app

我有一个用例,我需要在执行OAuth 2身份验证时在本地欺骗列入白名单的重定向URL。

我正在运行一个非常基本的网络服务器,加上我欺骗的域名的主机文件条目。我能够正确地协商我的令牌并将它们归还给Paw,但Paw没有拿起我的access_tokenrefresh_token,它只显示原始回复:

Paw authentication window

这是我的服务器代码(带有敏感数据的占位符):

var http = require('http'),
    request = require('request');

var PORT = 6109;

var server = http.createServer(function(req, res) {
    var code = req.url.split('?')[1].split('=')[2];

    request({
        url: 'https://<access token URL>/oauth2/token?code=' + code,
        method: 'POST',
        form: {
            'client_id': <client_id>,
            'client_secret': <client_secret>,
            'grant_type': 'authorization_code',
            'redirect_uri': <spoofed redirect URL>
        }
    }, function(err, response, data) {
        data = JSON.parse(data);

        res.writeHead(200, {'Content-Type': 'application/json'});
        res.write(JSON.stringify(data.result));

        // I also tried this with the same end-result
        // res.writeHead(200);
        // res.write('access_token=' + data.result.access_token + '&token_type=' + data.result.token_type + '&refresh_token=' + data.result.refresh_token);
        res.end();
    });
});

server.listen(PORT, function() {
    console.log('Server listening on port %d', PORT);
});

我错过了什么?为什么Paw找不到我的代币?

这是我的配置供参考:

oauth configuration

其他一些值得注意的要点:

  • OAuth提供程序是非标准的,并且从规范中删除了很多东西(我的代理部分存在于修补非标准位)
  • 重定向网址的域名是真实的,但网址无法解析(这是本地主机输入的部分原因)
  • 我没有展示流程的这一部分,但我在获得code值之前正确完成了授权步骤

2 个答案:

答案 0 :(得分:1)

我认为您可能在授权URL和访问令牌URL之间感到困惑。当您使用OAuth 2的授权码授予类型时,您需要在网页(授权网址)中设置用户确认步骤。

这让我觉得相反,您期望使用密码授予或客户端凭据?否则,如果您要使用授权URL,则需要在授权URL中指定网页。

注意:我已经使用我提到的两个最后授权(密码授予和客户端凭据)在Paw中尝试过你的Node.js脚本,它运行良好。

更新:根据以下评论,我了解您的更多信息。 授权请求应该(如果成功)向重定向URL 页面返回302重定向响应,并向其附加code URL查询参数。看起来您正在使用code返回JSON响应,因此Paw没有捕获它。

根据OAuth 2.0 spec (RFC 6749), section 4.1.2 。授权响应,如果被授予,code应该在进行重定向时作为URL查询参数(即URL中的?key=value参数)传递给重定向URL。

  

如果资源所有者授予访问请求,则授权      服务器发布授权代码并通过它将其传递给客户端      将以下参数添加到查询组件中      使用“application / x-www-form-urlencoded”格式重定向URI

引用规范中的示例,以下是授权请求的响应如果成功(代码被授予)应该如何:

HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA
           &state=xyz

答案 1 :(得分:0)

我看到重定向网址包含&#34;我的Spoofed Uri&#34;。

当我们需要使用授权代码流时,我们提供授权代码并重定向Uri。

当您提供的URI与Identity Server中为客户端保存的URI不匹配时,您将无法获取令牌,因为URI与客户端授权代码不匹配。

例如:考虑身份服务器中的客户端身份是: Auth Code: "xyx" Redirect Uri: "www.mylocalhost.com\xyz"

在您的示例中,您提供的组合是: Auth Code: "xyx" Redirect Uri: "<my spoofed uri>"

由于这些2不会匹配,因此不会收到任何令牌。

我相信如果您使用在身份服务器中向客户端注册的正确URI,您将能够接收令牌。