如何在 OAuth2Parameters 中设置多个范围

本文关键字:范围 设置 OAuth2Parameters | 更新日期: 2023-09-27 18:34:35

我想在OAuth2Parameters中设置多个范围。如何设置多个范围?这是我的代码。

//Scope for Calendar and Contact Group
    string[] scopes = new string[] {Google.Apis.Calendar.v3.CalendarService.Scope.Calendar, Google.Apis.Calendar.v3.CalendarService.Scope.CalendarReadonly, "https://www.google.com/m8/feeds/ https://apps-apis.google.com/a/feeds/groups/"};
    OAuth2Parameters parameters = new OAuth2Parameters();
    parameters.ClientId = CLIENT_ID;
    parameters.ClientSecret = CLIENT_SECRET;
    parameters.RedirectUri = REDIRECT_URI;          
    parameters.Scope=scopes[0];         //here parameters.Scope has String type. I can only set only 1 scope.

如何在 OAuth2Parameters 中设置多个范围

如果需要发送多个带有参数的作用域,则将多个Scope添加到一个字符串中,并将space作为分隔符。

var ScopeString = @"myscope/as/1 myscope/as/2" ;

然后将此字符串设置为parameter.Scope属性。

 parameters.Scope= ScopeString;

这适用于任何通用OAuth进程,请验证一下。
希望这有帮助

Scopes 只是一个字符串数组。 只需添加更多用逗号分隔它们即可。

/// <summary>
        /// The Google APIs Client Library for .net uses the client_secrets.json file format for storing the client_id, client_secret, and other OAuth 2.0 parameters.
        /// The client_secrets.json file format is a JSON formatted file containing the client ID, client secret, and other OAuth 2.0 parameters.
        ///      
        /// This file can be obtained from Google Developers console:   https://console.developers.google.com/project?authuser=0
        /// </summary>
        /// <param name="clientSecretJson">Path to the client secret json file from Google Developers console.</param>
        /// <param name="userName">The user to authorize.</param>
        /// <returns>a valid CalendarService</returns>
        public static CalendarService AuthenticateOauth(string clientSecretJson, string userName)
        {
            if (string.IsNullOrEmpty(userName))
                throw new Exception("userName is required for datastore.");
            if (!File.Exists(clientSecretJson))
                throw new Exception("Cant find Client Secret Json file.");
            string[] scopes = new string[] {  CalendarService.Scope.Calendar,            // Manage your calendars
                                             CalendarService.Scope.CalendarReadonly, // View your calendars
                                             "https://www.google.com/m8/feeds/",
                                             "https://apps-apis.google.com/a/feeds/groups/"};                  
         try
            {
                UserCredential credential;
                using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
                {
                    string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
                    credPath = Path.Combine(credPath, ".credentials/Calendar");
                    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets,
                        scopes,
                        userName,
                        CancellationToken.None,
                        new FileDataStore(credPath, true)).Result;
                    Console.WriteLine("Credential file saved to: " + credPath);
                }
                // Create Calendar API service.
                var service = new CalendarService(new BaseClientService.Initializer()
                    {
                        HttpClientInitializer = credential,
                        ApplicationName = "Calendar Authentication Sample",
                    });
                return service;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.InnerException);
                throw ex;
            }
        }

热门提示:">https://www.google.com/m8/feeds/https://apps-apis.google.com/a/feeds/groups/"是两个 gdata API 都不适用于当前版本的 .net 客户端库,该库仅支持发现 API。 话虽如此,您没有理由不能使用它来对联系人 API 进行身份验证,您只是无法使用此客户端库访问联系人 API,您必须使用 gdata 客户端库。