当我尝试让谷歌授权获取错误:网站发布时无效请求错误。认证 1.0
Posted
技术标签:
【中文标题】当我尝试让谷歌授权获取错误:网站发布时无效请求错误。认证 1.0【英文标题】:when I try to make google authorization get Error: invalid_request Error when site is published. Oauth 1.0 【发布时间】:2016-07-14 20:39:19 【问题描述】:我已经完成了使用 Oauth 1.0 的 MVC 站点 当我尝试从本地主机(从调试模式)使用 google 帐户进行授权时,我可以流畅地进行授权,没有任何问题,但是当我在服务器上发布我的网站时出现一些问题,当我单击按钮“google LogIn”时出现错误。请看下面的屏幕。
请开发者帮我解决这个问题。坦克你
附: 192.168.77.155 - 这是我的内部服务器IP,但我无法想象为什么要显示它。
返回信息野兔:
internal class ExternalLoginResult : ActionResult
public ExternalLoginResult(string provider, string returnUrl)
Provider = provider;
ReturnUrl = returnUrl;
public string Provider get; private set;
public string ReturnUrl get; private set;
public override void ExecuteResult(ControllerContext context)
OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);
public ActionResult ExternalLoginCallback(string returnUrl)
GooglePlusClient.RewriteRequest();
var result = OAuthWebSecurity.VerifyAuthentication();
if (result.IsSuccessful)
ProfilePicture helper = new ProfilePicture();
// name of the provider we just used
OauthProvider provider = helper.GetProvider(result.Provider);
if ((int)provider == 0)
Logger.Fatal("Unknown Oauth Provider try to SignIn. Check Providers Name (maybe it changeed)");
return null; //todo MessageBox for Unkown Provider, or something wrong
// provider's unique ID for the user
var uniqueUserID = result.ProviderUserId;
// since we might use multiple identity providers, then
// our app uniquely identifies the user by combination of
// provider name and provider user id
var uniqueID = provider + "/" + uniqueUserID;
// we then log the user into our application
// we could have done a database lookup for a
// more user-friendly username for our app
FormsAuthentication.SetAuthCookie(uniqueID, false);
string userName;
string nameAndLsatName = string.Empty;
var userDataFromProvider = result.ExtraData;
if (provider.Equals(OauthProvider.Twitter))
userName = result.UserName;
else
userName = userDataFromProvider["username"];
nameAndLsatName = userDataFromProvider["name"];
//Check if user already is in Db with Provider
var chekUserName = Uow.Users.Data.Where(x => x.UserName == userName && x.UserGroup.Id == (int)provider).FirstOrDefault();
if (chekUserName == null)
MM.Data.Model.User user = new MM.Data.Model.User();
user.UserName = userName;
if (!provider.Equals(OauthProvider.Twitter))
user.FirstName = nameAndLsatName.Split(' ')[0];
user.LastName = nameAndLsatName.Split(' ')[1];
user.Email = userName; //it'a Email
if (provider.Equals(OauthProvider.Twitter))
user.ShowNameAndLastName = false;
else
user.ShowNameAndLastName = true;
user.GroupId = (int)provider;
if (provider.Equals(OauthProvider.Twitter))
user.ProfilePicture = helper.GetImageInBytesByProvider(provider, userName);
else
user.ProfilePicture = helper.GetImageInBytesByProvider(provider, uniqueUserID);
Uow.Users.Add(user);
Uow.SaveChanges();
//Valid Login
//todo need improvement
var userModel = Uow.Users.GetSingle(x => x.UserName == userName && x.UserGroup.Id == (int)provider);
Session["User"] = new LoggedUserModel
Id = userModel.Id,
UserName = userName,
ProfilePicture = userModel.ProfilePicture
;
Session["UserId"] = userModel.Id;
//FormsAuthentication.SetAuthCookie(useruserNamename, false);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
return Redirect(returnUrl);
return RedirectToAction("Index", "Home");
// return View("", result);
return null; //need change
【问题讨论】:
【参考方案1】:在您附加的屏幕截图中,我看到 redirect_uri 是您的 192.168.77.155 ip。如果您更正它,谷歌将重定向回正确的 IP 地址。
【讨论】:
我的网站不使用我的服务器内部 IP 无处 (192.168.77.155) 它不是公共 IP。 请发布您用来重定向到 Google 屏幕的代码 我认为这不是代码内疚,因为在 Localhost 中一切正常。但我已经更新了问题,请查看 您发布的将在回调中命中的方法的代码。我是说您的代码永远不会到达此方法,因为 redirect_url 具有服务器名称。我们需要弄清楚redirect_url 是如何构造的。您是否使用 Startup.Auth 来配置 Google 登录 我认为问题根本与代码无关。您要么拥有负载均衡器,并且选择了负载均衡器的 ip,要么服务器 IIS 配置不正确。您在此处显示的代码将始终具有相对路径(如您的代码中所写)。以上是关于当我尝试让谷歌授权获取错误:网站发布时无效请求错误。认证 1.0的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security JWT - 400 错误请求:“无效授权”“错误凭据”
尝试获取访问令牌时出现“请求无效,因为应用程序密钥与客户端令牌相同”错误