Google OAuth Api 未在登录时重定向
Posted
技术标签:
【中文标题】Google OAuth Api 未在登录时重定向【英文标题】:Google OAuth Api not redirecting on Login 【发布时间】:2018-05-06 06:51:32 【问题描述】:我尝试使用 Google 身份验证服务对我的用户进行身份验证 当我在本地服务器上运行此代码时,它工作正常(它重定向到谷歌登录,并在成功登录后它在redirectPath 上的命中回调)。 但是当在生产服务器上发布此代码时,它就不起作用了。 当我调试这段代码时,我发现了它的重定向并在托管环境(应用程序发布的地方)打开了谷歌登录页面。
这是我的代码 - 请帮助
字符串重定向路径 = "http://localhost:1212/Admin/YouTubeIntegration/Success";
UserCredential credential;
using (var stream = new FileStream(Server.MapPath("/XmlFile/client_secrets.json"), FileMode.Open, FileAccess.Read))
GoogleAuth.RedirectUri = redirecrPath;
credential = await GoogleAuth.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubeReadonly, YouTubeService.Scope.YoutubeUpload ,
"user",
CancellationToken.None,
new FileDataStore(this.GetType().ToString())
);
如果您需要更多信息,请告诉我。 提前致谢
【问题讨论】:
嗨,我已经尝试过实际的重定向路径还有 string redirecrPath = "dummy.production.com/Admin/YouTubeIntegration/Success"; 确保您在谷歌开发者控制台中设置了正确的重定向 uri @DaImTo 在生产 uri 路径的情况下它在服务器机器上打开而不是在客户端机器上 本地主机和你的服务器是两个不同的地方。本地主机将是localhost/whatever。服务器将是 yourwebsite/whatever 它到不同的重定向 uris 您似乎也在使用已安装客户端的代码,您应该使用网络代码developers.google.com/api-client-library/dotnet/guide/… 【参考方案1】:从网页登录的代码与使用已安装的应用程序登录的代码不同。已安装的应用程序可以直接在当前机器上生成登录屏幕。如果您尝试在网络服务器上执行此操作,它将无法正常工作,以下是使用网络登录的代码
using System;
using System.Web.Mvc;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using Google.Apis.Auth.OAuth2.Mvc;
using Google.Apis.Drive.v2;
using Google.Apis.Util.Store;
namespace Google.Apis.Sample.MVC4
public class AppFlowMetadata : FlowMetadata
private static readonly IAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
ClientSecrets = new ClientSecrets
ClientId = "PUT_CLIENT_ID_HERE",
ClientSecret = "PUT_CLIENT_SECRET_HERE"
,
Scopes = new[] DriveService.Scope.Drive ,
DataStore = new FileDataStore("Drive.Api.Auth.Store")
);
public override string GetUserId(Controller controller)
// In this sample we use the session to store the user identifiers.
// That's not the best practice, because you should have a logic to identify
// a user. You might want to use "OpenID Connect".
// You can read more about the protocol in the following link:
// https://developers.google.com/accounts/docs/OAuth2Login.
var user = controller.Session["user"];
if (user == null)
user = Guid.NewGuid();
controller.Session["user"] = user;
return user.ToString();
public override IAuthorizationCodeFlow Flow
get return flow;
复制自here
【讨论】:
谢谢你是对的,我已经实现了网络代码并且工作正常。 @Dalm 你能解释一下 DataStore = new FileDataStore("Drive.Api.Auth.Store"); 我很高兴它为你工作记得接受回答者 @Danish 你应该问第二个问题,但我在这里有一个教程daimto.com/google-net-filedatastore-demystified 我也有一堆数据存储在这里gist.github.com/LindaLawton/a11851d51f13addd70264d01be1928bf以上是关于Google OAuth Api 未在登录时重定向的主要内容,如果未能解决你的问题,请参考以下文章
Facebook 登录消息:“URL 被阻止:此重定向失败,因为重定向 URI 未在应用程序的客户端 OAuth 设置中列入白名单。”
Facebook 登录消息:“URL 被阻止:此重定向失败,因为重定向 URI 未在应用程序的客户端 OAuth 设置中列入白名单。”
反向代理后面的 .NET 6 OAuth 身份验证:质询时重定向 url 错误
Flutter:当应用程序处于后台但未在 iOS 中终止时,无法在通知单击时重定向到特定屏幕