Asp.net mvc 用于Google的DotNetOpenAuth OAuth2客户端存在问题
我有一个ASP.NETMVC4应用程序。 昨天,我的用户开始抱怨他们无法使用谷歌账户登录。经过大量的谷歌搜索,我发现了这个:。我按照指示做了 我在Google控制台中为web应用程序创建了客户端ID 在AuthConfig.RegisterAuth()中,我有: 我有两个问题:Asp.net mvc 用于Google的DotNetOpenAuth OAuth2客户端存在问题,asp.net-mvc,asp.net-mvc-4,oauth-2.0,google-oauth,Asp.net Mvc,Asp.net Mvc 4,Oauth 2.0,Google Oauth,我有一个ASP.NETMVC4应用程序。 昨天,我的用户开始抱怨他们无法使用谷歌账户登录。经过大量的谷歌搜索,我发现了这个:。我按照指示做了 我在Google控制台中为web应用程序创建了客户端ID 在AuthConfig.RegisterAuth()中,我有: 我有两个问题: 更改之前,result.UserName包含用户电子邮件。现在它包含名称。但是我需要电子邮件。除此之外,注册也可以 我最大的问题是,现有用户无法使用他们的谷歌帐户登录。代码转到“//用户是新用户,请为他们询问所需的成员名
result.UserName
包含用户电子邮件。现在它包含名称。但是我需要电子邮件。除此之外,注册也可以“//用户是新用户,请为他们询问所需的成员名称”
。对于同一电子邮件地址,我现在获得的ProviderUserId不同非常感谢您的建议。您可以配置此库以将其他参数传递给Google授权服务吗?如果是这样,您应该传递'openid.realm=$your\u app\u openid2\u realm'(如果您的应用之前配置为openid2,它很可能在其请求中声明了'realm'值,您应该使用相同的值)
在本例中,您将从Google收到两个标识符。新的(与配置文件URL和更多Google API兼容)和旧的(作为openid_id返回)。是的,这个库很可能可以传递额外的参数,有一个字典参数extraData。我不确定以前使用了什么,我只是使用了ASP.NET MVC 4应用程序的默认安全模型。在Auth.Config中只有
OAuthWebSecurity.RegisterGoogleClient()代码>。我试图在整个解决方案中搜索“openid”和“realm”,但没有成功。请问有人知道ASP.NET MVC在使用OAuthWebSecurity.RegisterGoogleClient()时向google发送了什么吗代码>?拜托,有人知道吗?我被卡住了,我的用户无法登录。我相信很多人都不得不面对这个问题。非常感谢你的帮助。
var client = new DotNetOpenAuth.GoogleOAuth2.GoogleOAuth2Client(googleClientID, googleClientSecret);
var extraData = new Dictionary<string, object>();
OAuthWebSecurity.RegisterClient(client, "Google", extraData);
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 });
}
}