我正在尝试根据我们的目录对我们的Google Apps用户进行身份验证,以限制访问我们的一些内部应用程序。
它在我的桌面上运行完美,但不能在我们的生产服务器上运行。它挂在GoogleWebAuthorizationBroker.AuthorizeAsync()
它会在GoogleStorage中按原样创建Google.DP.Auth文件夹,但它永远不会创建Google.Apis.Auth.OAuth2.Responses.TokenResponse-user
文件。我甚至都没有获得同意屏幕。但是,如果我将“Google.Apis.Auth.OAuth2.Responses.TokenResponse-user”从我的桌面复制到服务器,它可以在所有后续请求中正常工作。
在我的绝望中,我已经覆盖了我自己的GoogleWebAuthorizationBroker
,AuthorizationCodeInstalledApp
和LocalServerCodeReceiver
类,并且发现它永远不会超过var context = await listner.GetContextAsync().ConfigureAwait(false);
的行LocalServerCodeReceiver
课程。 (这只是这样做,所以我可以将一些调试信息扔到服务器上的日志中,以弄清楚发生了什么)
这是我的代码
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
googleGo();
}
}
protected async void googleGo()
{
var f = new Google.Apis.Util.Store.FileDataStore(Server.MapPath("~/App_Data/GoogleStore/DP.Google.Auth"));
UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets {
ClientId = "XX",
ClientSecret = "YY" },
new[] {
DirectoryService.Scope.AdminDirectoryGroupMember,
DirectoryService.Scope.AdminDirectoryGroupReadonly,
Oauth2Service.Scope.UserinfoEmail,
Oauth2Service.Scope.UserinfoProfile },
"user",
System.Threading.CancellationToken.None,
f);
Oauth2Service service = new Oauth2Service(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Test"
});
var userinfo = service.Userinfo.Get();
var s = userinfo.Execute();
}
希望我错过了一些人可以指出的简单方法。 提前谢谢。