Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试通过oauth进行身份验证时拒绝访问_C#_Oauth_Oauth 2.0_Google Oauth_Google Ads Api - Fatal编程技术网

C# 尝试通过oauth进行身份验证时拒绝访问

C# 尝试通过oauth进行身份验证时拒绝访问,c#,oauth,oauth-2.0,google-oauth,google-ads-api,C#,Oauth,Oauth 2.0,Google Oauth,Google Ads Api,我可以通过从浏览器获取身份验证令牌并稍后使用“获取…”来获得访问权限。 但是我想在没有用户干预的情况下完成它。 我决定使用服务帐户。 但当我试图进入时, 我总是收到“拒绝访问”。 我正在使用 var oAuth2Provider = (user.OAuthProvider as AdsOAuthProviderForServiceAccounts); oAuth2Provider.GenerateAccessTokenForServiceAccou

我可以通过从浏览器获取身份验证令牌并稍后使用“获取…”来获得访问权限。 但是我想在没有用户干预的情况下完成它。 我决定使用服务帐户。 但当我试图进入时, 我总是收到“拒绝访问”。 我正在使用

var oAuth2Provider =
                (user.OAuthProvider as AdsOAuthProviderForServiceAccounts);
        oAuth2Provider.GenerateAccessTokenForServiceAccount();
oAuth2Provider的属性包括:

JwtCertificatePassword“notasecret”
JwtCertificatePath“D://xxxxx-privatekey.p12”
PrnEmail“jrusearchbroadtwomycc@gmail.com“//这是我的mcc帐户 已批准的开发令牌
ServiceAccountEmail“2222222-ckvf630rcccn3j7jjuf4fmujnbiotett@developer.gserviceaccount.com"

下面是错误的堆栈跟踪

    at Google.Api.Ads.Common.Lib.OAuth2ProviderForServiceAccounts.GenerateAccessTokenForServiceAccount()
   at AdwordsStat.GetReports.DoAuth2Authorization(AdsUser user) in D:\Adwords_API\Jooble_Adwords\GetReports.cs:line 48
   at AdwordsStat.Form1.Form1_Shown(Object sender, EventArgs e) in D:\Adwords_API\Jooble_Adwords\Form1.cs:line 87
   at System.Windows.Forms.Form.OnShown(EventArgs e)
   at System.Windows.Forms.Form.CallShownEvent()
   at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
   at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
   at System.Windows.Forms.Control.InvokeMarshaledCallbacks()
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at AdwordsStat.Program.Main() in D:\Adwords_API\Jooble_Adwords\Program.cs:line 16
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
然后我读到了关于谷歌应用程序账户的需求。 我已经注册,从我的服务帐户添加到它的帐户cliend id

22222222-CKVF630RCCCN3J7JJUF4FMUJNBiottet.apps.googleusercontent.com 范围:

但我再次被拒绝访问

然后我尝试使用另一个lib `

那我就试着

oAuth2Provider.AccessToken = access_token;
但再次拒绝接收访问


我已经试着解决这个问题一个星期了。

你真正想要完成的不是100%明显,但是如果你需要代表用户进行脱机访问,你可能需要的是一个“刷新令牌”,这样你可以在初始令牌过期时获得一个新的访问令牌。信息位于

我正在尝试在没有用户干预的情况下访问。它将每晚在我们的服务器上启动。所以我没有访问权,也没有机会手动获取访问令牌。有人能帮我解决我的问题吗???你找到解决方案了吗?我解决了。我现在正在使用google apps帐户检索api的访问权限。我已将此帐户注册为我的客户中心。我也是,但有一个不同的问题:将范围设置为
https://adwords.google.com/api/adwords
不带尾随斜杠,如图所示。结果证明,后面的斜杠是个大问题。
var result = GetAccessToken(SERVICE_ACCOUNT_EMAIL, SERVICE_ACCOUNT_PKCS12_FILE_PATH, SCOPE_ANALYTICS_READONLY);
            string access_token;
            result.TryGetValue("access_token", out access_token);
oAuth2Provider.AccessToken = access_token;