Yahoo DotNetAutho SSO登录:阻止雅虎创建弹出窗口

时间:2011-04-18 06:04:24

标签: .net openid dotnetopenauth

我正在使用DotNetOpenAuth库为Google和Yahoo创建SSO登录。当用户点击我的LinkBut​​ton(我使用自定义登录控件)时,我使用Request.RedirectToProvider()以编程方式重定向到提供程序。

这适用于所有浏览器中的Google和Yahoo。问题是雅虎似乎认为它是在弹出窗口中打开,并调整整个窗口的大小。

如何在DotNetOpenAuth中设置UI类型以防止此行为? UIModes似乎只有弹出模式?

编辑:我实际上没有使用过UIRequest扩展。这是我调试工作的一部分。

请求代码如下:

Dim OpenIDEndpoint As String = WellKnownProviders.Yahoo.ToString, OpenID As OpenIdRelyingParty = New OpenIdRelyingParty
    Dim LoginRequest As IAuthenticationRequest = OpenID.CreateRequest(OpenIDEndpoint)

    Dim Fields As ClaimsRequest = New ClaimsRequest()

    Fields.Email = DemandLevel.Require
    Fields.FullName = DemandLevel.Require
    Fields.Nickname = DemandLevel.Require
    Fields.BirthDate = DemandLevel.Require
    Fields.Gender = DemandLevel.Require

    LoginRequest.AddExtension(Fields)
    LoginRequest.RedirectToProvider()

2 个答案:

答案 0 :(得分:0)

UI扩展程序严格用于弹出窗口。如果您没有在弹出窗口中打开提供商的登录页面,请不要附加UIRequest扩展名。

我希望这能解决调整大小问题。

答案 1 :(得分:0)

感觉这在答案中比在评论中更好地呈现:

即使StackOverflow的Yahoo登录页面也有同样的问题!

在检查SSO的雅虎登录链接时,我注意到雅虎的SSO登录页面似乎针对弹出登录进行了优化。在页面上,有这个JS:

<script type="text/javascript">
var isPopup = "true"; //<-- Note this
if (window.opener || isPopup) {
  var Dom = YAHOO.util.Dom;
  var Event = YAHOO.util.Event;

  (function() {
    if (Dom.getViewportWidth() < 500 || Dom.getViewportHeight() < 675) {
        window.resizeTo(500,675);
    }
  })();

...

即使SSO不使用弹出窗口,雅虎似乎也将isPopup值设置为true。我不知道这是雅虎的错误,还是DotNetOpenAuth中的一些错误/错误。我会欢迎安德鲁对此的看法吗?

<强>更新

很奇怪,SSO吃了我的更新。

http://developer.yahoo.com/oauth/guide/oauth-userauth.html - 雅虎显然已经针对弹出窗口优化了他们的SSO登录页面。窗口大小调整可能是由此造成的。