0

我有一个使用 DotNetOpenAuth 3.5 进行 Google OpenId 身份验证的 ASP.NET 应用程序。

我最近不得不将 OpenId 行为更改为弹出窗口,以获得更流畅的 UX 体验。但是,弹出窗口会显示一个未针对弹出窗口优化的 Google 登录对话框。我意识到我必须以某种方式将 ltmpl=popup 参数添加到 url https://accounts.google.com/ServiceLogin?,但不知道如何。你能提供一些帮助吗?这是我正在使用的代码

string discoveryUri = "https://www.google.com/accounts/o8/id";
OpenIdRelyingParty openid = new OpenIdRelyingParty();
var b = new UriBuilder(context.Request.Url);
var req = openid.CreateRequest(discoveryUri, b.Uri, b.Uri);
var fetchRequest = new FetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
req.AddExtension(fetchRequest);
req.RedirectToProvider();
4

1 回答 1

0

我从来没有听说过ltmpl=popup你提到的这个参数,但是有一个 OpenID UI 扩展,它应该是 RP 如何与弹出窗口中的 OP 通信的。我已在您的代码片段中添加了必要的行,并清理了其他一些位。

var openid = new OpenIdRelyingParty();
var req = openid.CreateRequest(WellKnownProviders.Google);
var fetchRequest = new FetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
req.AddExtension(fetchRequest);
req.AddExtension(new UIRequest()); // inform the OP it's in a popup.
req.RedirectToProvider();

UIRequest 扩展将openid.ui.mode=popup参数添加到身份验证请求。

于 2013-02-21T16:37:22.567 回答