2012-01-18 7 views
0

こんにちは、私はOpenIdログインを持っているサイトを作成しました。あなたはログインボタンを押すと は、私は基本的にAJAX呼び出しでこれを呼び出すAjaxのメソッドを呼び出します。DotNetOpenAuth and ajax

[WebMethod] 
public static LoginResult Login(string url) 
{ 
    Identifier id; 
    LoginResult result = new LoginResult(); 
    if (Identifier.TryParse(url, out id)) 
    { 
     try 
     { 
      //request openid_identifier 
      FetchRequest fetch = new FetchRequest(); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Name.Alias); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Name.First); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last); 
      string rootUrl = "http://" + HttpContext.Current.Request.Headers["Host"] + "/"; 
      IAuthenticationRequest request = openid.CreateRequest(url, new Realm(rootUrl), new Uri(rootUrl + "?action=verify")); 
      request.AddExtension(fetch); 
      result.RedirectUrl = request.RedirectingResponse.Headers["Location"]; 
     } 
     catch (ProtocolException ex) 
     { 
      result.ErrorMessage = ex.Message; 
     } 
    } 
    else 
    { 
     result.ErrorMessage = "Could not parse identifier!"; 
    } 

    return result; 
} 

これにはJavaScriptを「RedirectUrl」を取得し、オープンIDで検証した後、それにリダイレクト素晴らしい作品プロバイダは)私はこの

http://localhost:33386/?action=verify&dnoa.userSuppliedIdentifier=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid&openid.ns=http%3A%2F%2Fspecs.openid.net%2 ............

のように戻っていくつかのことに送られますが、私はopenid.GetResponse(呼び出したときに行われ、状況を確認していますその失敗。 // localhostを:?33386 /アクション= & dnoa.userSuppliedIdentifier = httpsを確認してください:%2F%2Fwww.googleを私は例外を確認した場合 その次のメッセージ

にopenid.return_toパラメータ (HTTPが含まれています。実際のURLと一致しない (http:// localhost:33386/default.aspx?action = verify & dnoa.userSuppliedIdentifier = https:%2F%2Fwww.google.com%2Faccounts% 2Fo8%2Fid & openid.ns = http:%2F%2Fspecs.openid.net%2Fauth ........

私はここで何が間違っていますか?

注: 私はにreturnurlを指定しようとする理由は、私のWebサービスは、私は、要求を行う際に上陸する場所これはないです〜\ WebApi.aspxに位置していることを..です 私はアセンブリを見てみましたILSpyではなく、CreateRequestメソッドが多かれ少なかれ空です。

答えて

1

エラーメッセージの2つのURLを慎重に調べると、default.aspxが明示的に表示され、もう1つでは表示されないことがわかります。それがそれを破るのです。あなた自身の明示的なreturn_toを調整してページ名を含めると、あなたのために働き始めるかもしれません。

別の点として、レスポンスからロケーションHTTPヘッダーを取得し、それをJavascriptに送信することは信頼性がありません。一部のOpenIDリクエストは大きすぎるため、単一のURLに収まらず、Locationヘッダーは空になります。代わりに、応答オブジェクトには、自己提出HTMLフォームのペイロードがあります。最大サイズのしきい値を超えた場合、コードが失敗します。しかし、ここであなたの選択肢を探ることは、専用のStackoverflow質問に値する。 :)

+0

洞察に感謝して、私の問題を解決しました! – Peter