簡體   English   中英

無效的Accountmanager身份驗證令牌

[英]Invalid Accountmanager auth token

您好,我正在嘗試從我的PHP服務器上驗證使用accountManager創建的令牌,但是我一直從我的PHP服務器上的Google服務器上收到錯誤“無效令牌” ...這是代碼:

private String updateToken(boolean invalidateToken, int accountref) {
    String authToken = "null";
    try {
        AccountManager am = AccountManager.get(TestAuthActivity.this);
        Account[] accounts = am.getAccountsByType("com.google");
        AccountManagerFuture<Bundle> accountManagerFuture;
        if(TestAuthActivity.this == null){//this is used when calling from an interval thread
            accountManagerFuture = am.getAuthToken(accounts[accountref], SCOPE, false, null, null);
        } else {
            accountManagerFuture = am.getAuthToken(accounts[accountref], SCOPE, null, TestAuthActivity.this, null, null);
        }
        Bundle authTokenBundle = accountManagerFuture.getResult();
        authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString();
        if(invalidateToken) {
            am.invalidateAuthToken("com.google", authToken);
            authToken = updateToken(false, accountref);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    Dialog d = new Dialog(TestAuthActivity.this);
    d.setTitle("Token :" + authToken);
    d.show();

    createSession(TestAuthActivity.this, authToken);

    return authToken;
}

所以我得到一個令牌,然后將其發送到我的php服務器:

<?php

if( isset($_POST['authToken'])){        

    //pour que la réponse s'affiche comme du texte brut
    header('Content-Type: text/plain');

    /*partie à modifier*/
    $name = 'www.google.com';//nom du site

    $data = $_POST['authToken'];

    $envoi  = "POST /m8/feeds/contacts/default/full HTTP/1.1\r\n";
    $envoi .= "Host: ".$name."\r\n";
    $envoi .= "Authorization: GoogleLogin auth='".$data."'\r\n";
    $envoi .= "Connection: Close\r\n";
    $envoi .= "Content-type: application/x-www-form-urlencoded\r\n";
    $envoi .= "Content-Length: ".strlen($data)."\r\n\r\n";
    $envoi .= $data."\r\n";

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if($socket < 0){
            die('FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "');
    }

    if (socket_connect($socket,gethostbyname($name),80) < 0){
            die('FATAL ERROR: socket_connect()');
    }

    if(($int = socket_write($socket, $envoi, strlen($envoi))) === false){
            die('FATAL ERROR: socket_write() failed, '.$int.' characters written');
    }

    $reception = '';
    while($buff = socket_read($socket, 2000)){
       $reception.=$buff;
    }
    echo(json_encode($reception));

    socket_close($socket);  
}
?>

而且我不斷收到錯誤:401無效令牌:S

有沒有人有解決方案或好的樣本(找不到與我想要的樣本匹配的樣本!)

我可以想到您可能遇到的兩個可能的問題:

  1. 身份驗證令牌已過期。 當您調用方法updateToken()來獲取令牌時,需要將參數invalidateToken設置為true以確保獲得了新令牌。
  2. SCOPE的值是錯誤的。 根據您提供的代碼,您似乎正在嘗試使用Google Contacts API,因此該API SCOPE的值應為https://www.google.com/m8/feeds

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM