使用解析服务器进行数字身份验证

时间:2015-02-22 18:25:41

标签: android authentication oauth parse-platform twitter-fabric

在构建一个小型Android应用时,我决定尝试Digits以电话号码登录,Parse用于后端。

我如何使用Parse服务器验证Digits会话?

我已经开始使用下面的示例,但我不确定这是否正确' (改编自this post)。

Android客户端:

  1. 从数字

    请求auth(oauth?)令牌和用户ID

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

  2. 使用Parse

    验证此会话

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

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

  3. 解析:

    1. Auth端点需要电话号码,身份验证令牌和用户ID

      一个。使用twitter endpoint

      进行验证

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

      ℃。向客户返回确认

    2. 以上是有道理的,但Parse Example with Github login似乎做了一些略微不同的事情。使用Parse,对第三方的初始请求来自Parse服务器,而不是客户端。

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

1 个答案:

答案 0 :(得分:5)

这是我当前解决方案的gist

在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);
    }