6

c# .net を介して gmail 認証を介してサンプル アプリケーションをログに記録するために、DotNetOpenID dll を使用しています。

私が使用したコードは

protected void Page_Load(object sender, EventArgs e)
    {
        OpenIdRelyingParty rp = new OpenIdRelyingParty();
        var r = rp.GetResponse();
        if (r != null)
        {            
            switch (r.Status)
            {
                case AuthenticationStatus.Authenticated:
                    NotLoggedIn.Visible = false;
                    Session["GoogleIdentifier"] = r.ClaimedIdentifier.ToString();
                    Response.Redirect("About.aspx"); //redirect to main page of your website  
                    break;
                case AuthenticationStatus.Canceled:
                    lblAlertMsg.Text = "Cancelled.";
                    break;
                case AuthenticationStatus.Failed:
                    lblAlertMsg.Text = "Login Failed.";
                    break;
            }
        }
    }

    protected void OpenLogin_Click(object src, CommandEventArgs e)
    {
        string discoveryUri = e.CommandArgument.ToString();
        OpenIdRelyingParty openid = new OpenIdRelyingParty();
        var b = new UriBuilder(Request.Url) { Query = "" };
        var req = openid.CreateRequest(discoveryUri, b.Uri, b.Uri);
        req.RedirectToProvider();
    }

Gmailログインボタンをクリックするとうまく機能し、Gmailページに移動し、必要に応じて認証します。

しかし、私の問題は AuthenticationStatus.Authenticatedステータスで、Gmailアカウントの正しいユーザー名とパスワードを指定しているにもかかわらず、常に認証後に失敗しました

貴重な回答とコメントを待っています

4

2 に答える 2

0

私は DotNetOpenID dll に慣れていません。ただし、Fiddler を使用して、ログイン中に送信される POST のデータをキャプチャし、投稿で正しいコンテンツを送信していることを確認することをお勧めします。C# はにHttpWebRequest クラスHttpWebResponse クラスを提供しSystem.Netます。代わりに System.dll のこれらを使用していない理由はありますか?

POST から Cookie を取得したら、それ以降の要求のために Cookie コレクションにそれらを入れていることを確認してください。

セメントによって回答されたこの投稿には、リクエストを処理するための優れたサンプル クラスがあります。

于 2013-03-19T20:18:21.237 に答える