7

私はOpenIDの実装に興味があり、それについて読んでいますが、まだ少し混乱している側面がいくつかあります。

このような相互作用と段階的な詳細の複数のフローチャートを見てきましたが、それらはすべて、ログインが成功したときに何が起こるかについての詳細をスキップします。私が読んだことはすべて、「ログインが成功すると、ユーザーはサイトにリダイレクトされる」という言葉に沿ったものです。さて、私のサイトはログインが成功したことをどうやって知るのですか?Cookieが設定されていますか?POSTが返されますか?

たとえば、ここに私が含めたリンクからの詳細があります

9. User POSTs response to OpenID Server.
10. User is redirected to either the success URL or the failure URL returned in (5) depending on the User response

//this is the step that it says tells me I've had a succes/failure upon login
5. Consumer inspects the HTML document header for <link/> tags with the attribute rel set to openid.server and, optionally, openid.delegate. The Consumer uses the values in these tags to construct a URL with mode checkid_setup for the Identity Server and redirects the User Agent. This checkid_setup URL encodes, among other things, a URL to return to in case of success and one to return to in the case of failure or cancellation of the request

それをどう解釈するかはよくわかりません。ログインが成功したことを具体的に教えてくれますか?私が集めたものから、ヘッダーの何かが設定されているように見えますが、どうすればそれにアクセスできますか?ログインが正常にログインされたことがわかった場合、それは先に進んで自分のサイトに関連するCookie /セッションの設定に進むことができることを意味しますか?

編集-私はLightOpenIDを見つけました、そしてそれは私のニーズに合っているように見えます、しかし私はまだ何かについて少し確信がありません

私はそれをローカルホストでテストし、グーグルログインを機能させました。ログインすると、次のようなURLを受け取ります

User https://www.google.com/accounts/o8/id?id=sdlkfjlkwliej9392010fjos has logged in.

コードを調べると、次のように生成されます

echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';

これは、ログインのために$ openid-> validate()をチェックするだけだと思いますか?$ openid-> Identityは、指定されたGoogleアカウントで毎回同じになりますか?はいと思います。そうしないと、毎回ユーザーを追跡する方法がありません。ユーザーがログインしている場合は、Cookie、セッション、およびその他の必要と思われる楽しいものを設定できますよね?

4

1 に答える 1

1

ここに私が使用するいくつかのコードがあります:

require '../../php/lightopenid-lightopenid/openid.php';

if( isset( $_COOKIE[ 'claimed_id' ] ))
{
    $claimed_id = $_COOKIE[ 'claimed_id' ];
    try
    {

            if(!isset($_GET['openid_mode']))
            {
                            $openid = new LightOpenID;
                            $openid->identity = 'https://www.google.com/accounts/o8/id';
                            header('Location: ' . $openid->authUrl());
            }
            elseif($_GET['openid_mode'] == 'cancel')
            {
                    unset( $claimed_id );
                    setcookie( "claimed_id", 0, time() - 3600, "/" );
            }
            else
            {
                    $openid = new LightOpenID;

                    if( $openid->validate() )
                    {
                    // different login
                            if ( $_REQUEST[ 'openid_claimed_id' ] != $claimed_id )
                            {
                                    unset( $claimed_id );
                                    setcookie( "claimed_id", 0, time() - 3600, "/" );
                            }
                    }
                    else
                    {
                    // cant validate
                            unset( $claimed_id );
                            setcookie( "claimed_id", 0, time() - 3600, "/" );
                    }
            }
    }
    catch(ErrorException $e)
    {
            echo "Authentication error.";
            error_log( $e->getMessage() );
            exit;
    }
}

// fall through to rest of code...
于 2013-02-07T15:17:54.387 に答える