【问题标题】:problems with DotNetOpenAuth OAuth2 Client for GoogleGoogle 的 DotNetOpenAuth OAuth2 客户端问题
【发布时间】:2015-04-24 13:12:03
【问题描述】:

我有一个 ASP.NET MVC 4 应用程序。 昨天我的用户开始抱怨他们无法使用他们的 Google 帐户登录。经过大量谷歌搜索后,我发现了这个:DotNetOpenAuth.GoogleOAuth2。我按照说明进行操作。

我在 Google 控制台中为 Web 应用程序创建了客户端 ID。

在 AuthConfig.RegisterAuth() 我有:

var client = new DotNetOpenAuth.GoogleOAuth2.GoogleOAuth2Client(googleClientID, googleClientSecret);
var extraData = new Dictionary<string, object>();
OAuthWebSecurity.RegisterClient(client, "Google", extraData);

在 AccountController 中,我有这样的东西:

public ActionResult ExternalLoginCallback(string returnUrl)
{
    DotNetOpenAuth.GoogleOAuth2.GoogleOAuth2Client.RewriteRequest();
    AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

    if (!result.IsSuccessful)
    {
        return RedirectToAction("ExternalLoginFailure");
    }

    if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                // here I have some logic where is user sent when login was successfull
                return RedirectToLocal(returnUrl);
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                // User is new, ask for their desired membership name
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                // some logic
                return View("ExternalLoginConfirmation", new RegisterExternalLoginModel { UserName = username, ExternalLoginData = loginData, EncryptedEmail = encryptedEmail });
            }
        }

我有两个问题:

  1. 在更改之前,result.UserName 包含用户电子邮件。现在它包含名称。但我需要电子邮件。除此之外,注册工作正常。

  2. 我最大的问题 - 现有用户无法使用他们的 google 帐户登录。代码为他们转到"// User is new, ask for their desired membership name"。我现在得到的 ProviderUserId 对于同一个邮箱地址是不同的。

非常感谢您的建议。

【问题讨论】:

  • 请问,有人知道吗?我被卡住了,我的用户无法登录。我相信很多人都不得不面对这个问题。非常感谢您的帮助。

标签: asp.net-mvc asp.net-mvc-4 oauth-2.0 google-oauth


【解决方案1】:

您能否配置此库以将其他参数传递给 Google 授权服务?如果是这样,您应该传递“openid.realm=$your_app_openid2_realm”(如果您的应用之前配置为 OpenID2,它很可能在其请求中声明了一个“领域”值,您应该使用相同的值)。

在这种情况下,您会收到来自 Google 的两个标识符。新的(与配置文件 URL 和更多的 Google API 兼容)和旧的(以 openid_id 返回)。

【讨论】:

  • 是的,这个库很可能可以传递额外的参数,有一个Dictionary参数extraData。我不确定之前使用了什么,我只是使用了 ASP.NET MVC 4 应用程序的默认安全模型。在 Auth.Config 中只有 OAuthWebSecurity.RegisterGoogleClient();。我试图搜索“openid”和“realm”的整个解决方案,但没有成功。
  • 请问有人知道在使用OAuthWebSecurity.RegisterGoogleClient(); 时 ASP.NET MVC 发送给谷歌的内容吗?
猜你喜欢
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 2016-12-03
  • 2022-07-20
  • 2017-01-11
  • 2011-11-16
  • 1970-01-01
  • 2017-09-26
相关资源
最近更新 更多