2

在构建一个小型 Android 应用程序时,我决定尝试使用Digits使用电话号码登录并使用Parse作为后端。

如何验证与 Parse 服务器的 Digits 会话?

我从下面的例子开始,虽然我不确定这是否“正确”(改编自这篇文章)。

安卓客户端:

  1. 从数字请求身份验证(oauth?)令牌和用户 ID

    一种。发送数字密钥和秘密,检索对象

  2. 使用 Parse 验证此会话

    一种。发送电话号码、身份验证令牌和用户 ID

    湾。如果授权有效,则接收带有用户信息的确认

解析:

  1. 身份验证端点接受电话号码、身份验证令牌和用户 ID

    一种。使用twitter 端点进行验证

    湾。将身份验证令牌哈希和用户 ID 插入 Sessions 表(未来的请求将 ping 此表,而不是 twitter)

    C。向客户返回确认

以上是有道理的,但是使用 Github 登录的 Parse Example似乎做了一些稍微不同的事情。使用 Parse,对第三方的初始请求是从 Parse 服务器发出的,而不是客户端。

Github 需要发送一个“状态”参数,这似乎是 Parse 示例从服务器发送其初始请求的原因,而 Digits 不需要这样的参数。这是否会降低数字身份验证的安全性?有没有办法让这个过程更安全/正确?

4

1 回答 1

5

这是我当前解决方案的要点

在 Parse 方面,我发送了一个如下所示的 http 请求:

// Within a /verify_credentials webhook
Parse.Cloud.httpRequest({
    method: 'GET',
    url: req.get(headers[0]),
    headers: {'Authorization': req.get(headers[1])},

    success: function(httpResponse) {
        var obj = JSON.parse(httpResponse.text);
        res.status(httpResponse.status).send("success");
    },
    error: function(httpResponse) {
        res.status(400).json({
            error: 'Unable to make a twitter request'
        });
    }
});

在 Android 方面,我向 Parse 服务器发送了一个 http 请求,其中包含标头中的 Parse 会话信息:

    TwitterAuthConfig authConfig = TwitterCore.getInstance().getAuthConfig();

    // Cast from AuthToken to TwitterAuthToken
    TwitterAuthToken authToken = (TwitterAuthToken)session.getAuthToken();

    OAuthSigning oAuthSigning = new OAuthSigning(authConfig, authToken);
    // First value should be the location we're querying to twitter. 
        // The second is the actual validation information
    Map<String, String> authHeaders = oAuthSigning.getOAuthEchoHeadersForVerifyCredentials();
    try {
        cloud.verifyCredentials(
                authHeaders.get("X-Auth-Service-Provider"),
                authHeaders.get("X-Verify-Credentials-Authorization"),
                session.getId(),
                callback);
    }
于 2015-03-08T23:50:05.470 回答