2

ユーザーに承認スロー google openid を追加しようとしています。ID ( https://www.google.com/accounts/o8/id?id=AIt...Ew-Bo ) を受け取っていますが、それが合法であることを確認するにはどうすればよいですか。ユーザーが別のユーザーのメールで悪意のあるリクエストを作成できることを意味します。返信メールと主張された ID が正当であることを確認するにはどうすればよいですか?

4

4 に答える 4

3

ディスカバリと署名検証を自分で実装しようとするよりも、この目的のためにすでに作成されている多くのライブラリの 1 つを使用する必要があります。さまざまなプログラミング言語の束を次に示します。

http://openid.net/developers/libraries/

于 2010-06-05T06:29:26.873 に答える
1
public function verify_response()
       {$params=$_REQUEST;
        $query=array('openid.signed'=>$params['openid.signed'],
                     'openid.sig'=>$params['openid.sig'],
                     'openid.mode'=>'check_authentication'
                    );
        $keys=explode(',', 'openid.'.strtr($params['openid.signed'], array(','=>',openid.')));
        foreach ($params as $k=>$v)
                {if (in_array($k, $keys))
                    {$query[$k]=$v;
                    }
                }
        $query=http_build_query($query);
        $response=file_get_contents($params['openid.op_endpoint'].'?'.$query);
        return stripos($response, 'is_valid:true')!==false;
       }
于 2011-03-15T02:36:28.357 に答える
0

Google の OpenID (Google Apps for Domains OpenID を除く) は、単なる標準の OpenID です。アサーションが正当であることを確認するために、他の OpenID が必要とするすべての予防措置を講じる必要があります。その通りです... RP が署名を検証し、識別子の検出を実行し、その識別子の承認された OP エンドポイントを応答に署名したものと一致させない限り、誰でも OpenID ポジティブ アサーションを作成して RP をだますことができます。

メールアドレスを信頼できるかどうかは、あなた次第です。Google OP エンドポイントを信頼することを選択できます。

于 2010-06-03T03:09:24.683 に答える
-1
function ValidateWithServer(){
    $params = array(
        'openid.assoc_handle' => urlencode($_REQUEST['openid_assoc_handle']),
        'openid.signed' => urlencode($_REQUEST['openid_signed']),
        'openid.sig' => urlencode($_REQUEST['openid_sig'])
    );
    // Send only required parameters to confirm validity
    $arr_signed = explode(",",str_replace('sreg.','sreg_',$_REQUEST['openid_signed']));
    for ($i=0; $i<count($arr_signed); $i++){
        $s = str_replace('sreg_','sreg.', $arr_signed[$i]);
        $c = $_REQUEST['openid_' . $arr_signed[$i]];
        // if ($c != ""){
            $params['openid.' . $s] = urlencode($c);
        // }
    }
    $params['openid.mode'] = "check_authentication";

    $openid_server = $this->GetOpenIDServer();
    if ($openid_server == false){
        return false;
    }
    $response = $this->CURL_Request($openid_server,'POST',$params);
    $data = $this->splitResponse($response);

    if ($data['is_valid'] == "true") {
        return true;
    }else{
        return false;
    }
}
于 2011-02-25T07:52:15.563 に答える