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

Android 使用解析服务器进行数字身份验证,android,authentication,oauth,parse-platform,twitter-fabric,Android,Authentication,Oauth,Parse Platform,Twitter Fabric,在构建一个小型Android应用程序时,我决定尝试使用电话号码登录,并在后端使用 如何使用解析服务器验证Digits会话 我从下面的例子开始,虽然我不确定这是否“正确”(改编自) Android客户端: 从数字请求身份验证(oauth?)令牌和用户id a。发送数字密钥和密码,检索对象 使用Parse验证此会话 a。发送电话号码、身份验证令牌和用户id b。如果授权有效,接收带有用户信息的确认 解析: 身份验证端点获取电话号码、身份验证令牌和用户id a。验证 b。将身份验证令牌哈希和用户id插

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

如何使用解析服务器验证Digits会话

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

Android客户端:

  • 从数字请求身份验证(oauth?)令牌和用户id

    a。发送数字密钥和密码,检索对象

  • 使用Parse验证此会话

    a。发送电话号码、身份验证令牌和用户id

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

  • 解析:

  • 身份验证端点获取电话号码、身份验证令牌和用户id

    a。验证

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

    c。向客户返回确认

  • 上面的说法是有道理的,但a似乎做了一些稍有不同的事情。使用Parse时,向第三方发出的初始请求来自解析服务器,而不是客户端

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

    以下是我当前解决方案的一个例子

    在解析方面,我发送了一个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方面,我向解析服务器发送一个http请求,其中包含头中的解析会话信息:

        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);
        }
    
    TwitterAuthConfig authConfig=TwitterCore.getInstance().getAuthConfig(); //从AuthToken强制转换为TwitterAuthToken TwitterAuthToken authToken=(TwitterAuthToken)会话。getAuthToken(); OAuthSigning OAuthSigning=新的OAuthSigning(authConfig,authToken); //第一个值应该是我们向twitter查询的位置。 //第二个是实际的验证信息 Map authHeaders=oAuthSigning.GetOAuthChoheaders for VerifyCredentials(); 试一试{ cloud.verifyCredentials( authHeaders.get(“X-Auth-Service-Provider”), authHeaders.get(“X-Verify-Credentials-Authorization”), session.getId(), 回调); }
    您成功地将2集成在一起了吗?效果如何?你发布了吗?如果是,这个解决方案是如何运行的?@Felker这对我们正在开发的应用程序来说效果很好。从那时起,我们已经切换到应用程序引擎,所以我不确定这个解决方案是否仍然有效。我相信Parse正在关闭,但它可能与他们的Nodejs库一起工作