2

小さな Android アプリを作成する際に、電話番号でログインするDigitsとバックエンドのParseを試してみることにしました。

Parse サーバーとの Digits セッションを検証するにはどうすればよいですか?

以下の例から始めましたが、これが「正しい」かどうかはわかりません (この投稿から適応)。

Android クライアント:

  1. 数字から認証 (oauth?) トークンとユーザー ID を要求する

    a. 数字のキーとシークレットを送信し、オブジェクトを取得します

  2. このセッションを Parse で検証する

    a. 電話番号、認証トークン、ユーザー ID を送信する

    b. 承認が有効な場合は、ユーザー情報を含む承認を受け取ります

解析:

  1. 認証エンドポイントは、電話番号、認証トークン、およびユーザー ID を受け取ります

    a. Twitter エンドポイントで検証する

    b. 認証トークン ハッシュとユーザー ID をセッション テーブルに挿入します (今後の要求は、Twitter ではなくこのテーブルに対して ping を実行します)

    c. クライアントに承認を返す

上記は理にかなっていますが、Github ログインを使用した Parse Example は少し異なることをしているようです。Parse では、サード パーティへの最初の要求は、クライアントではなく、Parse サーバーから行われます。

Github では「状態」パラメーターを送信する必要があります。これが、Parse の例で最初の要求がサーバーから送信された理由のようですが、Digits ではそのようなパラメーターは必要ありません。これにより、数字認証の安全性が低下しますか? このプロセスをより安全/正確にする方法はありますか?

4

1 に答える 1

5

これが私の現在のソリューションの要点です。

パース側では、次のような 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 に答える