1

MVC3アプリケーションでOpenIDを設定しましたが、Gmailログインを使用しています。下記の私の認証書をご覧ください。私はコードを実装していますhttp://weblogs.asp.net/haithamkhedre/archive/2011/03/13/openid-authentication-with-asp-net-mvc3-dotnetopenauth-and-openid-selector.aspxGmail OpenIDユーザーが認識されない

IISでローカルに実行すると、すべてが正常に動作し、else文とbuttonGreenコードが表示されます。 Web上でそれをデプロイすると、 "if(String.IsNullOrEmpty(Model.UserName))"上を移動し、 "New User、Register"コードに終わります。 model.OpenIDが表示されます。 このコードはMyOpenId(他の問題のために放棄した)でオンラインで動作します。

メンバーデータベースがメインデータベースにロールインされ、ユーザーがOpenIDログインによってローカルに作成され、ロールに割り当てられ、データベースがWebにプッシュされます。私は2週間前に最新のDotANetOpenAuthを使用しています。私はDotANetOpenAuth.Core、DotANetOpenAuth.OpenIdとDotANetOpenAuth.OpenId.RelyPartyを使用しています。 OpenIDの-jquery.js

/* 
    Simple OpenID Plugin 
    http://code.google.com/p/openid-selector/ 

    This code is licensed under the New BSD License. 
*/ 
var providers; 
var openid; 

(function ($) { 
openid = { 
    version : '1.3', // version constant 
    demo : false, 
    demo_text : null, 
    cookie_expires : 6 * 30, // 6 months. 
    cookie_name : 'openid_provider', 
    cookie_path : '/', 

    img_path : '../Content/themes/base/images/', 
    locale : 'en', // is set in openid-<locale>.js 
    sprite : 'en', // usually equals to locale, is set in 
    // openid-<locale>.js 
    signin_text : 'Sign-In', // text on submit button on the form 
    all_small : false, // output large providers w/ small icons 
    no_sprite : false, // don't use sprite image 
    image_title : '{provider}', // for image title 

    input_id : null, 
    provider_url : null, 
    provider_id : null, 

    /** 
    * Class constructor 
    * 
    * @return {Void} 
    */ 
    init : function(input_id) { 
     providers = $.extend({}, providers_large); 
     var openid_btns = $('#openid_btns'); 
     this.input_id = input_id; 
     $('#openid_choice').show(); 
     $('#openid_input_area').empty(); 
     var i = 0; 
     // add box for each provider 
     for (id in providers_large) { 
      box = this.getBoxHTML(id, providers_large[id], (this.all_small ? 'small' : 'large'), i++); 
      openid_btns.append(box); 
     } 
     $('#openid_form').submit(this.submit); 
     var box_id = this.readCookie(); 
     if (box_id) { 
      this.signin(box_id, true); 
     } 
    }, 

    /** 
    * @return {String} 
    */ 
    getBoxHTML : function(box_id, provider, box_size, index) { 
     if (this.no_sprite) { 
      var image_ext = box_size == 'small' ? '.ico.gif' : '.gif'; 
      return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"' 
        + ' style="background: #FFF url(' + this.img_path + '../images.' + box_size + '/' + box_id + image_ext + ') no-repeat center center" ' 
        + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>'; 
     } 
     var x = box_size == 'small' ? -index * 24 : -index * 100; 
     var y = box_size == 'small' ? -60 : 0; 
     return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"' 
       + ' style="background: #FFF url(' + this.img_path + 'openid-providers-' + this.sprite + '.png); background-position: ' + x + 'px ' + y + 'px" ' 
       + 'class="' + box_id + ' openid_' + box_size + '_btn"></a>'; 
    }, 

    /** 
    * Provider image click 
    * 
    * @return {Void} 
    */ 
    signin : function(box_id, onload) { 
     var provider = providers[box_id]; 
     if (!provider) { 
      return; 
     } 
     this.highlight(box_id); 
     this.setCookie(box_id); 
     this.provider_id = box_id; 
     this.provider_url = provider['url']; 
     // prompt user for input? 
     if (provider['label']) { 
      this.useInputBox(provider); 
     } else { 
      $('#openid_input_area').empty(); 
      if (!onload) { 
       $('#openid_form').submit(); 
      } 
     } 
    }, 

    /** 
    * Sign-in button click 
    * 
    * @return {Boolean} 
    */ 
    submit : function() { 
     var url = openid.provider_url; 
     if (url) { 
      url = url.replace('{username}', $('#openid_username').val()); 
      openid.setOpenIdUrl(url); 
     } 
     if (openid.demo) { 
      alert(openid.demo_text + "\r\n" + document.getElementById(openid.input_id).value); 
      return false; 
     } 
     if (url.indexOf("javascript:") == 0) { 
      url = url.substr("javascript:".length); 
      eval(url); 
      return false; 
     } 
     return true; 
    }, 

    /** 
    * @return {Void} 
    */ 
    setOpenIdUrl : function(url) { 
     var hidden = document.getElementById(this.input_id); 
     if (hidden != null) { 
      hidden.value = url; 
     } else { 
      $('#openid_form').append('<input type="hidden" id="' + this.input_id + '" name="' + this.input_id + '" value="' + url + '"/>'); 
     } 
    }, 

    /** 
    * @return {Void} 
    */ 
    highlight : function(box_id) { 
     // remove previous highlight. 
     var highlight = $('#openid_highlight'); 
     if (highlight) { 
      highlight.replaceWith($('#openid_highlight a')[0]); 
     } 
     // add new highlight. 
     $('.' + box_id).wrap('<div id="openid_highlight"></div>'); 
    }, 

    setCookie : function(value) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (this.cookie_expires * 24 * 60 * 60 * 1000)); 
     var expires = "; expires=" + date.toGMTString(); 
     document.cookie = this.cookie_name + "=" + value + expires + "; path=" + this.cookie_path; 
    }, 

    readCookie : function() { 
     var nameEQ = this.cookie_name + "="; 
     var ca = document.cookie.split(';'); 
     for (var i = 0; i < ca.length; i++) { 
      var c = ca[i]; 
      while (c.charAt(0) == ' ') 
       c = c.substring(1, c.length); 
      if (c.indexOf(nameEQ) == 0) 
       return c.substring(nameEQ.length, c.length); 
     } 
     return null; 
    }, 

    /** 
    * @return {Void} 
    */ 
    useInputBox : function(provider) { 
     var input_area = $('#openid_input_area'); 
     var html = ''; 
     var id = 'openid_username'; 
     var value = ''; 
     var label = provider['label']; 
     var style = ''; 
     if (label) { 
      html = '<p>' + label + '</p>'; 
     } 
     if (provider['name'] == 'OpenID') { 
      id = this.input_id; 
      value = 'http://'; 
      style = 'background: #FFF url(' + this.img_path + 'openid-inputicon.gif) no-repeat scroll 0 50%; padding-left:18px;'; 
     } 
     html += '<input id="' + id + '" type="text" style="' + style + '" name="' + id + '" value="' + value + '" />' 
       + '<input id="openid_submit" type="submit" value="' + this.signin_text + '"/>'; 
     input_area.empty(); 
     input_area.append(html); 
     $('#' + id).focus(); 
    }, 

    setDemoMode : function(demoMode) { 
     this.demo = demoMode; 
    } 
}; 
})(jQuery); 

なぜそれがローカルに動作しますが、ウェブ上で失敗します:

<form action="[email protected](Request.QueryString["ReturnUrl"])" method="post" id="openid_form"> 
<input type="hidden" name="action" value="verify" /> 
<div> 
    <fieldset> 
     <legend>Login using OpenID</legend> 
     <div class="openid_choice"> 
      <p> Please click your account provider:</p> 
      <div id="openid_btns"></div> 
     </div> 
     <div id="openid_input_area"> 
      @Html.TextBox("openid_identifier") 
      <input type="submit" value="Log On" /> 
     </div> 
     <noscript> 
      <p> 
       OpenID is service that allows you to log-on to many different websites using a single 
       indentity. Find out <a href="http://openid.net/what/">more about OpenID</a> and 
       <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p> 
     </noscript> 
     <div> 
      @if (Model != null) 
      { 
       if (String.IsNullOrEmpty(Model.UserName)) 
       { 
        <div class="editor-label"> 
         @Html.LabelFor(model => model.OpenID) 
        </div> 
        <div class="editor-field"> 
         @Html.DisplayFor(model => model.OpenID) 
        </div> 
        <p class="button"> 
         @Html.ActionLink("New User, Register", "Register", new { OpenID = Model.OpenID }) 
        </p> 
       } 
       else 
       { 
       //user exist 
        <p class="buttonGreen"> 
        <a href="@Url.Action("Index", "TalPro")">Welcome @Model.UserName, Continue... </a> 
        </p> 
       } 
      } 
     </div> 
    </fieldset> 
</div> 
</form> 

ここではJavascriptをですか?

ありがとうございます。

詳細をさらに絞り込むにはIIS ExpressのModel.UserNameを使用してローカルにホストすると、正しくログインしたときに成功します。 Web(DiscountASP IIS 7.0)でホストされている場合、Model.UserNameは設定されず、ログインは失敗します。問題はなぜですか?これはIISと関係がありますか?それはクッキーと関係がありますか?どのように私はそれを修正するだろうか?

答えて

0

Googleは、さまざまなOpenIDレルムに異なるOpenIDクレーム識別子を発行します。ローカルにログインすると、あなたのレルムは「localhost」になる可能性が高いが、実際にはそれは明らかに異なっているため、Googleは異なるOpenIDを発行してユーザーを認識させない。この点でGoogleはかなりユニークです。

本物の領域からあなたのクレームIDを取得することをお勧めします。

+0

実動領域の主張識別子はIPに依存していますか?最も可能性の高い動的IPを使用して、複数のユーザーが異なるレルムでデータベースを使用できるようにする予定です。私は新しいユーザーごとではなく、一度定義されたユーザーとロールを入れておく必要がありますか?それは実行可能な計画ですか?ありがとう、ジョー – Joe

+0

それはIPアドレスに基づいていません。 realmはOpenIDリクエストに入る文字列であり、通常はWebサイトのベースURLです。たとえば、http:// www.yourserver.com /です。領域が変わらない限り(httpとhttpsを含む)、識別子は同じになります。 –

+0

週末にこれを見てみましょう。 – Joe

関連する問題